<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.4.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/%E8%BF%AA.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/%E8%BF%AA.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">
  <link rel="stylesheet" href="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"zhengyidi.github.io","root":"/","scheme":"Pisces","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":true,"show_result":"flat","style":null},"back2top":{"enable":true,"sidebar":true,"scrollpercent":true},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":true,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},"path":"search.xml"};
  </script>

  <meta name="description" content="面向对象、设计原则、编程规范、重构技巧总结">
<meta property="og:type" content="article">
<meta property="og:title" content="07.面向对象、设计原则、编程规范、重构技巧总结">
<meta property="og:url" content="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/07.%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E3%80%81%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99%E3%80%81%E7%BC%96%E7%A8%8B%E8%A7%84%E8%8C%83%E3%80%81%E9%87%8D%E6%9E%84%E6%80%BB%E7%BB%93/index.html">
<meta property="og:site_name" content="Zhengyidi&#96;s 学习记录">
<meta property="og:description" content="面向对象、设计原则、编程规范、重构技巧总结">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2021-07-10T00:00:00.000Z">
<meta property="article:modified_time" content="2021-11-13T14:58:22.494Z">
<meta property="article:author" content="zhengyidi">
<meta property="article:tag" content="设计模式">
<meta name="twitter:card" content="summary">

<link rel="canonical" href="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/07.%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E3%80%81%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99%E3%80%81%E7%BC%96%E7%A8%8B%E8%A7%84%E8%8C%83%E3%80%81%E9%87%8D%E6%9E%84%E6%80%BB%E7%BB%93/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>07.面向对象、设计原则、编程规范、重构技巧总结 | Zhengyidi`s 学习记录</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

<link rel="alternate" href="/atom.xml" title="Zhengyidi`s 学习记录" type="application/atom+xml">
</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">Zhengyidi`s 学习记录</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">休对故人思故国，且将新火试新茶。诗酒趁年华。</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
        <i class="fa fa-search fa-fw fa-lg"></i>
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>首页</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-fw fa-tags"></i>标签</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-fw fa-th"></i>分类</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>归档</a>

  </li>
      <li class="menu-item menu-item-search">
        <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
        </a>
      </li>
  </ul>
</nav>



  <div class="search-pop-overlay">
    <div class="popup search-popup">
        <div class="search-header">
  <span class="search-icon">
    <i class="fa fa-search"></i>
  </span>
  <div class="search-input-container">
    <input autocomplete="off" autocapitalize="off"
           placeholder="搜索..." spellcheck="false"
           type="search" class="search-input">
  </div>
  <span class="popup-btn-close">
    <i class="fa fa-times-circle"></i>
  </span>
</div>
<div id="search-result">
  <div id="no-result">
    <i class="fa fa-spinner fa-pulse fa-5x fa-fw"></i>
  </div>
</div>

    </div>
  </div>

</div>
    </header>

    


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/07.%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E3%80%81%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99%E3%80%81%E7%BC%96%E7%A8%8B%E8%A7%84%E8%8C%83%E3%80%81%E9%87%8D%E6%9E%84%E6%80%BB%E7%BB%93/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="zhengyidi">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Zhengyidi`s 学习记录">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          07.面向对象、设计原则、编程规范、重构技巧总结
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>

              <time title="创建时间：2021-07-10 00:00:00" itemprop="dateCreated datePublished" datetime="2021-07-10T00:00:00+00:00">2021-07-10</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                <span class="post-meta-item-text">更新于</span>
                <time title="修改时间：2021-11-13 14:58:22" itemprop="dateModified" datetime="2021-11-13T14:58:22+00:00">2021-11-13</time>
              </span>
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" itemprop="url" rel="index"><span itemprop="name">设计模式</span></a>
                </span>
            </span>

          
            <div class="post-description">面向对象、设计原则、编程规范、重构技巧总结</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look.">
  <script id="hbeData" type="hbeData" data-hmacdigest="62df6f3ccb251a9b7f8843732d1ea8d7c6c184dd6b6fcddf542169f0bbad3220">22064b17c03cb0c0e58c99349b6889d0b31470871e725085fde7c8feed9af7efd187dcf66412936ef109d47907f1fa9d66f45dd3dbb7fc88fbe35569e9693e55a551e082d4aea4bef9267e184e4fb5ce1c66539f9d2d9e42c168aa7efce75826f441e8a12a9903cf39d58a790fc4d109c6e20ffab73d7b0ee05823ae52865a9e17f36d980cc2b654b377ae9ecbf2a131ec3ad4cbe1a9fcea71c9fc5626015f46a74962c0d32a71ef760ab613c72a32e0280ad84c59220ab80f522754644e1f9a0c74bea4f73b4a6e1c3c1a0ca473dde90ce5b9d205c000662d368bbf3b145cc8c2e9961d76cbbf58c8e66b1bf79df494deb7aa03722f11a1a528c4da8370d9440b34bcc0826780fd46b7a98ee9940878d01731d8e8e4260e2a12c3cff450d8ba5d54e54013ec0b31471162b8b396d14741427280aeced8b35e57b346646ee115592b2a1af74255dce88a7f9f78ad6293f377388da308130fe485c95d793173c58ff08290f21ae1878ba46f0078846a241878e429aa988d5292aafa019258d1b1e43ee2b3863e41ac24126b33d398ca388e885e01bf15449f053c64707bdcf37e07a7465d72edc8cbf1e64dc92938a3a01e6ecf7675b6e9b300ed760c24aae480e416cf58913c03fdc1cc647b9aa289b6eece087def26d8eeda6ff24ddeaa39a5e1c9c3e5bbf83dd9ec762b5ec883ba84567a5d841dde12608bf92bb9cb0c2e28e1a1b50751625ff7ff79a92188ba095293cbfe2afad010e0245af588d8c4bcfbb997c99e5713b19f4bf5da6d06d0789ac387be1ef8eaa642f62fdfed27b0d22ca32499167e55b7e3bfaf376dfd0acccaad01596ba37ef9c423d073750cb3908447120a0c4f45fbdeeeed31b925ec2003f86ba7badf09237178c80f8c2dea0c335a61eb11e54db5e857ef92082d6b2ad7cb18e976e35122d96ad314bf8df2e43db9849b376ed176f49c5be2fdf3a82870d8da407ca075421d7c5480de1afe6b340fc027c2115e5046f982160af2a1db31a05d9c66198f5d4f28a714e2389b44fb0c99a0978021b1475bbe03da4dead05885ea95c8d55f8d35d4357941bde1d0fe697cafd76c63b78b56ddc50c3898a59e7fa7c6a56e61a98c070bf85aa91bfd7584a69391d46c44dcde2237cfcefa4d324271fa9bc7b79aca15c9fbbf1d961f1ce151a6a4df2d37ba26088b843f357786821d072a9a1091fbc363685736f8ad55bdca38439566d84d4a63618269bc1e8a2f1168eb331dab688a45cc583fedbd6dabc89c115f55262b1227365fef380e7a13e9aa440afcebdde3b37e02887ba212b771e43d58fc6312ff35843271c2a25f1c2c4afeace1620bcf7db2a0e2cb8cb09a98833cc8659f27e6251528187ab0daf5bed21210a05be004ddd5bbc12427efbed8d2b223000dd7025fb54c37926f33e92f0d3e5a47bb5dc852e6fef962ab9711d3230b9b8b1ee40a653e6a991ce439f6dd5bb8e1be581069be4c76cd38301f334d423f9f3724a460b3b8f6f36c91eca7de801411c3bd183d6ba8fa444e21d20f3fe95dfdd62f4a86e3c0dc5c6056f7d6e320226df6c4c33be34c022af6e9b73f8ef76f675fa485c65471aabf2af739b502a63f521640c33f81374b619d44a30946b4c3c50304a9c51a5dab28a202430952758ef1c3a02297f0476fb30a83993f799fd5215d85ae53d555b953711e39bc39f37ab2d4c34c227907095f8ec1a05941e4bb0c14c5a07b491cdf7a12762da972e88a19f21faacdeef6f64f7bba73ca9aa81da98c896d7aea08eb28dc71d9d09dbfffd1ba4b1d12b557ab271e4c7daf3643d4838ac44407fd56a5fdd4f49b5392d0c845d99d784b7995c16117480befbd9aa9e9fe3ce1e37ae6a307578b1002606ce26c10fce555a7dfc9fec4886d8df228b924edb3be68c7616c675b48e3b43211316a125724d32dbe97349ac5a122203999d580ae998a79463114e91c9b7a6eb1a912c7439bae5b2c964a46aa4a78dd35657f21a49c9896b03fda011bc3759297604fa76caed200b502caf3f0f3170154085c2a25d42adfda500321c50fb42ebce34e7112f210c93761bc6bc5db75e543aa329111ca20d151702d489485f007ad51061d6a5edf5f80e5c406fbeb47cfebeb2c6441b560b98906dba3f8250e6851e43a16d410d85afcd6fd568eb24acf2f5820fd8702c745d51f844558571529900793b3631d3b1bff059f7f94fd0f2f0c5dffec887bf297bb1e2c1d3cc4dbcff3e0cc9b7e5c09cea14e31dd75706fe96192788bfadfcd0542c94e26cfca022adb5b7d4716f5a1c6d66b75ae856231e9b2ea47a58d6758dc2ee5924addb2a479bb4450511a2eeb6a70846a71a2889986e41ddb4da9fd00ec4aecae1063df59243313f3e531150af0f1e6a37d90bb03621a87d778c04da27b700af8ee93fd86a03ee2c7b6906dafe1d1d8d70ae20cfaa7bc4c2cd695e1d3105d5238afc18133da7f4ebbe028ea0df4cd5a2070a07bc59ba8afecaf231dd37636dda2486128947bf1a37ed1d24c48f876d30d5e0af908c48c9b7fa24c07e1587007da666a4d88d7cc7aaf5af409a2bc334c37938ce8fa4c0ba89e5cd63e3ce4874173c00773d501fba161ab951aa16b6531413eb362c7bb67bacbae4f27e4ddf8765a0b7f078e8829448d2572ac0e6d7789eaf058e86f3df107a96a3c373e43d2c7f0a832fc8dc99e852e65e461307e436c86ca54eedcec1cff105d62e480142f92af25f47046578aaf703b37e49722fd9ae249f082a0f28627c5b3ebeb951dfc6457f8fc4b25bb067e87b8cacd634a78367278997d739b026fb586353009e58d8150ae2345dd2ddc9a0f3a0d68dc0df79aaffcc323b69998fb7b045cee3abe6154af24ad0968a0fd5c014e6a31ba5943b4d453466368dfedfbcc0f791db7f6a8e4cea51b0721a58751f84f9fe333c5a3b5a6400c94e54990eb4615d9b031c068e6d0d9a39c9dd6d6e6e2a58bce0fb4b11ddce3fa953c254933920afb59d5451a1f435fc7ffeff57c5092df75ad426fc884cc5282bbe088f6a77efc3a7cb5fe33e514388c186a93900397a6784a6531676d82c57265c7560765704fcbad8d1de5efc364d37845a641036072d49bff3ab5e6f5b0dd319bebfcecea9006c6d69cdb7e1f9df7efa881eb3ff6f3f491f120f63b254eab9884dbf64c4642568a6b4db1449c3bf1e09b59e9ffee18da7539adc02295c60f5a16332cb34ea90641918c50e7ec3a23c55cd5cb712efa2e8695c0b38c44b9256cfda6cb6cf54530bc351b9ac8cf02f5f6c736be394c69f8a8fbd690d90a53635ba43a0e1ef8002b1624f5197bdb67a4f39dc7fa4aef3dcd205ee00ac8d11ed897cba2bbaae43d760a7b90d1cccd1bf7ac86a0181882ee24d9d06d836320910b1b6f771d87fe9fe8ad68afd07abf7c721d67dfcf3ce67f027ea228242f0a2c6ee0e4792d11807b7a552b716fd5d9ebe2c0775a143852c47e8bb49e0bcd2badcc40907831e16854d903ba4d28f9242ba438946a9e3dcd0630f6af6e044b5a5919372dc52b603e38daf5b10d0ecf05fa4c8da5b270d57d14710c807ba51214dbdcbf3e84da651d98c81882183299fad67a5449f4099ddfb2a673399dc3747c772159b5a1c5332524347185fb7f806d68712f031a3df5196dcf8765116af0ab494614718e706e856da21f822e6af97cb9bc3f3450a6ea25593088ff6afb71ebfc59e27cfdb4ab37b3acf30bd014904c33f49605b5a5a18307943c091270e2862bdc2086aaf014d1ffc8a846fb6d462f7b6d30e9749117f87b8336527f42daaf978421d82c65ea326dc17e8e44a0a89df88da838057dab702e59319d528bee9497c7944eaf142704a10f4aa2db880fb05e7831fbbe26a2eb5307ce4ee2785230a74975d897c2d69bd0b99d7cbb6a74c12129cabd2e514481088adfd71528a3e3e7f9fc8046204a096042b8369907332ae1bf3f46320d3d8525151efc8bae7b7bcc111312417917cbdd8dd4e62734cde68d60d1421641d16af2c93c5bf57788f300e48f8cf34f32537d37b29bd7405595288db617f7baf7fe863c5457ddacf1ab8a38aa988329061c5bb216ed914489b2ccb549c62f8b493e1fde03ef453c4233a8ecf9e7b7ede98d8001321a7fb0074a51145f63d75bdbfc54bbc540684a6105a8effd99acc1d830be5556116f1ea6563240fa4892316b0188206ded67c3116f56cadebb8524267df835c13947b9ff49c9644479a7b744aa55375dc92dfbd2a85232ab1e324656fc1a9de336510a1020c9be4cd1ea9b30f9ba1e391362bfd9e83e668a597621186f3c50ac91a3766bbc0acc0e46176cdf2903cc82deb460da9fe7b6488d3940538169440be92b626681bf6f2af6ad29c9c3622554f0ce3022259182569b94f4cb33ad81473f7501b5a71e36c2b1668afb6158f59a4a265c2c9f083db0a003e69e6df685227efde3bdaf6c2e9bb3783f7a29fa9d07d7a9f83418ed4a692c26f7703e53bec1fe39ab61d2a394dce4039e97781c76ae2198af9352f26a24e36257f2d21a5834ef9ee022f5bf02786f322f09bbd4194c34217b95127c32edf109df52f7aafa703a1b615d27402cf3e4c85cab80369fe8ac4d60e48cce2e18f787aee7787ffa3e72a495c5bb12f0c7430f9f611fa785be3e22ad179cb14d4b63b69e1708b11880ce3973187b6e080c12c84a26e04b9958e2cab04b15a6de21f3f814f76d3f53849256418d71c8e8bc53776436925b512311ce37bb015578c3549062b8fa36a6c44fa40dacfebc3fd1287bf13aa65d44def7ee41003ae2a7eaed7e0dcafba0b7e299a607e134d2f48c15ee33648aac90216dd0fec0b9a8b029afe8aed9170466622cab616d99674e76dc6f61e45e35628cebbfcf8530323aab82ba59de7d0fc2a47a1fd12b0a8fd844b086999cafe3f6f3d8b9278ea75e76c605baa1adf585e159d46c9483aa6460aa262d0a3ac545bea6b44e3571941f8d401ed7d0a2823d1d8a1ba561babcc81078b34f9607a16eb6ee0ec5096c2fa3ab90b0735199fac2808cdc5c4bb1e813a7b05c9563a4c7dd13af34e69cbbe96b3f13439b6c7452f333578587274acc95cab9afa7ca8ebaca053be54c01fa2cd36aecefea024e421ad34f4b678a97cdf581e303b03005fcba60e8c79104195a92184083e2617d811b6eb7ff3edff3526715ba387311a3b1c0b8872ed8fece3b7dc1ac133dfc95ba09e2b86c65d93251de3127cc0a51613db7ca3db607d2d9408cef64ea7b9728eb6d50885841daa28b4922cffa98d2ce057bc2748a1564cd7e5bf30392861fa21b15a8619179cdd1ddea62a514141abde446481add761aa266030bd9367f333f66b0c1bd5b1a20146a96adaa374d2d83b1b1520041612118d7725a11164612614f0c8c921882367088fdb42677efc1ab9720f025aaf886f53ab10fd5795741df9460a9c51ef781b69b6dd18018791019d1a7809e67a3833cfea7b6bcc68bc684a7df8bf6ef9a3bc4fb9d1826c689f434b1e3c82cea0836cf73078533cc2edc609ecb141c42b7c9e2c2e8c4b1ee9753b480dd73741f7d44777f1dca40d2b6a5738f696c9dcc8a28df50c634a58a78771a4cc3dc610a9b2ec4cea75285e6db58177459e99d3b149dd05723202d37c77230a93a9a1e6be55c7cca9c00aba0b4c46c5e622d95b7ccffabf3420911a78a9de888848a9cfd08c68f052c275190a0702bbfdadc28cc8e1aee13e6b5832605b5c09735ccc6c0908dfec2367707395ff017be3b90e8a9f23e1ebd2135cdbed20118e4d9f4740ba26dd10f7b31fac3d107784603b34b10c9fd8c5ce719644bf3d1e7916d612b5dace983b897d3ef322a961017449fed80450d0e706ae94c9afa5019056e05291fe8e010c11a6a1cc1bcc62fd5333c2dea8ab73794f30cde060a6c301dd0f41558617657f33e5662c1107ceda863ccc885f6b5aa398cf64cfe5a79af2b93b449ec276b6b64f5bc91719c58cf7973673526530e57677d582c631335ebb77fcc26205c9fc6696567a48910b8743756e316f95285ba163a683ce158732bd2dda89cbb359ec946537b3f7c0fee37dbfd9456716a06323c3705f787455e8ae80ddc6f67eec3ec7083c026108f74f3b112ee55b1363584fa9972ddfb7c0a1e66b3b3c7ba300fb9a247e6a79e6e9eb43cfb7ade18d6aad317cbe9d21137f48599b381d2ac8225a05aa35ba64586a49d31cc721b5cfcaa50e92e8889586befc8c5d01a25397d8f9c87810d3a5c5b0997c295f847b8834ff412667000de6d8562f0368c7b7fc0c6dfa21e752dc1f08fdc4cab0e80601765091c92bdfd1bef0b6de9dd774ce52723f7a4399d63d96015c6ab05d3046ccbc735fda8140a0f5826c1e408d7571275cd2771f158295803f9c8dd6928cc9e8050252aa28d5cc1e3e0a15fbadcf6dd37b283fb8a63149b902f8567b7299f6abeb2ab40a924b0e2d8a54918b0a335c80d9fb254fbe73216823d90f6d937aae544af424a22f97c89ce4e79fc641bb251a529505d98f08ebef81182528617a5ce6db11db992d653585cc8d681638a1844a77e43b25d1385497b47040b6e8800486eb963a7da9e1a29bccb713723aa75514473acb79b17eca527f3a7123a4692ad433dfb08e0176c5dcf630f6f819a82ba0125e100511a63f6e3a70a48ba1964792b58a15b64b3be7bc612655df154e1af19d1a8d4e81848d65cebb84b3773a98e0fedbef9294e24cf6928392f1f52bfb3bcc2b9ac406f66b2fd2d244fc93ec1fc7fb3b494152849ca25db892e1dad17d778c4e6fdd889d0ac1921bd6793d73a8dd10d76566e1d6ba7cf61322cc8484ca540be57846f722ef675087fbd567e3f23484c46b1b79a431d6384792679471883b0ba14c9f0e6ef2f68c16bdece6b8bbbd755bfd77cd2f31dc3618431f26f5bc8cb7d2824f350c47885337f5da9ef604ccdcbce463000ec708734dfbc49f2892ccf755c0fa6e427b88d53a3a385d1b9768c4cca39263a9855ee2484db6d1b71549c185a9ec7ffe6c606e7882d7e594206aecc0c3fd6159bc8e743786d22b1cec28c854ca9171ea3806dc7411399b1d73b77bab2f3e7e41ea0b6032fc5705897f6a0a8cd17a5c88b397f579c6a85d0ed4469e6eb0dfd78983bec97a534e6b35bc88c878a756ab83b54caf10525f15bab2aa71731c7f62d384a60e3c42fc3bf106097d6f0e318a41083dc55d0b32d547baafbb98c980ffd0a6051037251611d2bcaee335049f7c7fb0567aae1b0ccf9716738e2fda9de97a6d2648056db319e5a70b76dce0d90ca405ef91c1579d63cbad79a4718ebf8025341a0b9617285ddf86f48440cbebd868737cf8080b6ce4888b8bed9df8eaf871c986091fe4acd405b9513032c1d89de351bc4249b9d9a1e6efd9d1a5508711c4bfb7a1bcf259c478c35477741f5f72036899e49fea3142afd620b65a1ba1e279a7f125ec48eb1f1a1750864f37257ad7c14424bd7a34dcbe8a0ef7f613a6b6edf51bc3bf28445fc3e31e1964888c87455737396d6f241ff66bba72ca5be6cb6f1900a508eeb33327de137815a08258dead49f5d49b0376aa07ebac3a713696df8a150379c319f2ad0be1fdef506141af7ccd2420f01d158781465d7bed1ec941daf8c7aaad38b4a4f19181ee684c1a0f5f3f4962966126fe8ec4e8cffb2884915c0aaad4b2d90feffa1a19fb0d336150f81047522a5aebc223c1602aa5cff5779d2b82182e77fbbd230afaa1f4521fd2f2f2f5a2738a48496aefcffcc249779bb779c5095651db84d24af7ec1925f1bb8a33bdbb9a364fc192119f82543c2303702574fe8bf36fd1ddd4bb8a13382b2faa8075a1268c76aca6464297043f2403a5333a2a111a6b03d64845c59e46b5a19d95fb1261d349796fb8020680889193a8d286fa9ebcf85ab00b245c00e68d991a6fcb42407fe8951598240d6e6206342ff168b91a91df500e04dd23c6a2d7b3604ce902ae533728c84340a96e874d775027cff728abe080d69948af8717958659b9276bdf135a40cee3d2bbb618fd94ebdcc89592c7c596363771e1540b6f4e81eedf3de83e3d9917e88eccb93c9b17caa2876fa5dc321396547ba04486d3fe061eb760ebc21801b60c72ea53eafc30d2f72267e08c7583aff85359692574f7bb76cf0c7d82611cb54176e9005f8df8bc968497a5ed3300b2eece38284612265b73eb7287e98f1bd6ea77c1c5a6fc2a18f486abdb32fdfd757be4b892d1204e5a6869e5ac27bc024928d5247d160d4153870c5b2546deb525b2695e0113cb1cad7fd7196b44a33595187a2c7fe3b468eef6f68aa7c8c40bb8a4dfcb9f4cb4909a6c6d2af4e68800df080f1ab5e8d6c48e0d8989e7e092c83531c0e33e305a9ea29a39412f606e936664f72f182eb1b9b2e0c9bf65be1e40fdbee4c3819a9c928ab44819a1d063549f0c3c58ca3553bcd089100c07cf57b21e09b025a8f0a85cc511e76d1383a6831e323045dcefb411ca047960ef32c5357e0ce458ceeabba3017a913e5f370bb408768b3c42b22470fe3e0d5a84c50a83633807595f651ad101242c7d5e89ae708bdcf750bb45bfd3bb058b4b5359055313fc1016c9227af284db6fbf151be17149c06cf27f90befac5886e2a4fb56d63dbdca8d9a1c6a3cd2717dc55319e32623535f095b9dd95bd56de6141c90e63b014f72e3b1026781eee432b16045c182fb9b4e7a70f942eeac1ad0ef38abf4ec6d7cbbc5162a27b1f7e6edf910a84fb9b6324c757a6042a2bd985d436d7228a9e0a163aebf5947edbe1eb03de6d515251f59f324598589e038aa40cc9a0a0fe9102189028617303859ab6af5bc85669ea2908cdf4abdbdcc4ba1980aef57d3902438f2c900903d8edc820d0ad1553e56d739e8f13eebd97ccbe8af032b2aa275cc9959583c056720d3019d71c893901f74a85b23a540e521801be026fcd329e9c60037bc8b162755876e564f4cf88b58e43d1b227456365aeeea3d38b01a8c9621f732081e79f07de33c70409fa3db88ad4d63470b93138f1af276045c501f0cbd175f97deb55e8c80975ab192a5fb7a23a267c38c9a25e8a09f124bc0f9e013f1d48b37ad8077193a6aa34e251a368929fb70aa18e5e9cc73af5393156f549bc53015365d76b4fd8f482198060f896513017586bf6c6344c530b7549a8eff4335e725b88b56acce89273520559d3dea61fb5cc0a857e9549de045e8fddf28d28cf0fcc54cb83d16a6b069006f58412036e0b792e2275823f1d1771133bd118d7609387b39965a97cc8f4c7d74f249d52db544fffef2159dbe5b2f5a96dcefed9dda2dad64eca6e9dbaf8cfffe24bbdb2a76aadc498c6cd7942e7b2fbbb5869950dd70b87b2f39a0519b311a49e71522537dc2d16f7f6361e78342c3b533ff22d16bfe587d08fc8eaabc95b37df9e3b3456db39f83d582fe60563e77d16bfd141e7ddb7e1bca38fe095b55b16d8c83a8cc072f2ee95eabd8e916cf96500f7fd906bafa199ffd3341b3a5028da7d8d0312ca6d7912080c08e534b2f94a173307ce208a59367d64b33dd25a9a1379921f6b289cdb1321be55465728cd54d8f2cd41f36ad96784d442a793e4a2d3a3cf19f9ea16a6549f301de484a85f3cee95776d7565d0b5d3344270758df0e15c13d6323f945d43e2cf006551746c02eb740b74118769fa62187c9a9fe49f77aafbefc2faf9260b405ffb43447eae2912e475594b8ab800f1dab1c754d7d522eaee196379915bf068cb0d44b616461faebdf2632f1d7c7864098bd37d4cc8211897b04269a15052dd86acb249816601be4948704627c6a1afa4a734fa344e0f894278257a40d17e8bf75a77892047e8c63899b3f27f8f9a57f1e2b8b49e3e371da8b2fc40f246254d4f076f360f4989f9a20e6500bbfb0e4ad241d0b2b4fbf2d97d37b5fe3e3dd3093c7e32caa3ec3496918260308fc31b478d0e3cd7d7083382c5a801f87916f660201cb95401889498db49b7eb1c7bdce8e2b0d95a4b3cd99ea790b8717300a235e65cc36295310cf31544a1771167a143c1a2bbc13122decaea6d4900df2fa4e3d28cdd717b24a529bcaba2df2fbd1c2b72afd06adbad579d13c17d7cc2d055a2c90f33e45deb05837b7fc5157f1bc8a6bdf0e6194255a3d7a113927f6a450e0f359157a6573f10640e7673aad30894544882d28e7e187e638915eb554bc7af3ed28f70e5f6bd1d4f3c5c9f925194af07ba7a20fb74e96931f3586705afee25485a027ff127247ba0c64f5fbcf9525e8ca16453d5ce1ca754fa8830caa51b7aca0022ed89133d5fddb01b5f0acc88a0fcb841a6397f23d7f0b434b7e92926b53bd3993e89c868469260e83b9239cfdc1cd0581fff0c27cc61698f5651b41fa57f9d42a12757f391308b650e069d2d88d7a6e7c288be6b1479da3ded30f927474e6d38028932cd71c07d2a219db40785406616933277089b1d1205b58ae54faacc7ea57e37717603dea74a726f568dccf5027a84db6415a55939c5aece1e6e765a4c68a32a368d4e0ed0e7fa8f7683368ba4f7c330714a39c815915989508f5444b9e85e520c27562197de2c45995d5c5cbf0ad86d1402a4c6eb8e59c7dc0e35e30d81c6023e87b80e064042d2cb399fc554ce2468e5559f6db065e4fa066fcc6f44f4aa9d8929aa683ded2e1ef65425a7b31507e70b2b59d759d7049a1cac77f3e7660645c984f15becd3f0a9d5d798e4784fdaa2dcd1799d4a4ca0e079579e75af0685a5cfd4c2d5cbb1c4500fd5fec1dc46990b0e4ef8106dcdaef448c7bf3f1c787dcf3fcfb2d4d9705518e94f3bcb09ae25135dbdd31166efc3650bf0ec9d2f2833884156dacdff3c54c9748ce89e3f34b6f870dabfe8327b2245edafd6844abd6742de3a3ca42fa0620f3621f0af63d4be0d3304f16a0962ba7a3f37b20cba0b0c8531bc2b8a463ddcd3482670d961b233a9d716746820f617b1248b7fea9e7010a3206e5e6a224c12534f79d4ee69cd39a62d941c04c8392971d955377ab71de07c359d7ba7b0916bfe03b6c0e363bd37b81e119f01632616ca0ce082940bdb15024c2059652fb10a8535ce992e546bba1e26ea536a7a82b9f31126267ea060749383ab9bbca125cd1e87e2079e5395e56efd1f2fbed7a890f04b5070d0f6c8863a7c587458d41f7b3d2b718e1d47881b3c040e4ce21e6c50f1f0b85f9c54ab68fdf471b8b35bc7a7e88768b3aa8d47b885775fa6d3c61885ba653e4c881d7900da0e78daf2da5e8ded374ab9e1531083eb747611bb46b3e924f3c941b7b3de0721e1f1871c687abc1f460287ceff26703bca03cdd3353d9c4129622fede528bd268f151307dccb65717097d07921be3720ac4e584a30858344b681f54146e4007d8e1fbd9d0a935941b481b8f0d7ea665d49f2b1ed5cc2f5414cdd9df7d09c34a4bce72d277bf1dd772c7738076ac6fb49bde9bf9039b68b462687a5bf976736e4c94ff4e06f47a5a6dc188968133b70c1a2505201473ed041843344a28c48bfdfe2c6911add6181e2380961fbc063844c89d49122ba1ed3d6e5999edeeedceef707c81d0746bf35cee30949085056f1a86a33c26beda29e04884bdafaa1643029848683284daaadd51a482632ca3a0bd4496acbce6628e9f27e2ba41b0174ebf5b5a36d3df80a9660ee21ecd6bc2f991a41ed47d2aceb3f67ea5f6212bee3511acb153bac2ee0d7e3eb67629888a74257a60e985391097558431b72436e5a4608c191b6367190a68547dde3aa4b2c61e96ef25c0a3a0612351bb77eb75b83188bdf0c9f84a55b5aa9f6af5a8971c98b87f704333ae314a5ab87be14c149934c1d98d7f0c627eb7fc3ab30a8ad935e1009f06e8d1263fe1b0882ce9628e47f16311aadb142148ded6fa54268fbfc012bea4f1036c993d254ed7e1437bf5376d3f08fb1a71bbf038cba0a1f2734a21ddbfdc1328265f82bcd180cba0295f258b4a5e3c2472463f2a238dee5946bf4245fd848d2f6f2f4259f7dd1cb892afa1b4159b0c1b897d3e930b861aec365c857407faa49a449cea8df3dda395611698024c026910b9d9cf757c3aaed5d0ece1da34c2318aff0d9e1fcf4f45f393df2fb7a1651a5393f1b78468053b41bf97ed1f7f87b4bae5fd679fc9221cf25aa122e61bf7eaaf79380f8493e10157ed0fe6359f9daccec55164cbf0b0679cbdb9ae09d5ff4073803cd7afea8d4b106e4fa791f8d6a8cbba37d7550aa0032b36198ce04159242d6c07b002a331c3eeb0876c23b4430c70db5207d23b06eb995e9f1845b16d0a1d98c57cecfd867e91f30834f37f235b8b41e6685a1cd3b05a5fe1e1dc0ab15cab8e58249a7ca577dc28fd577d71303ce470b84cd8f3c136021ecbc993a4c68e89aeece3eaccb61a4c27c33a033f607397ebcdf872ca92726a9fc15be6a28888c94d12e26fde86ca6f4fc5df7af87c2fc047cf59c3ac16521bf1cbcbe7a9e05f20c97acd2e19f713179ba36443d6a0bf2bf4c09213a4ea1e860e0ca86f8945c01ccb417aa8583b3d66a29184a8fb0eb088d7ca9c7e2550ca13168d86ac4f76010be6b5d488678bda85df51c512b4716a47d81b5724ef7bf26904c239ded313f5d71c26726371b03997afe824fad9be33b956f76339b7fd8f032be8f1800a9d927728d1f3e2e9cf35fa5c6039387ec7ca1e822462df79d315ad6cbf6e4e5357d94eb52dc29d572d0b232551cdc53366e52179641e3df30f1067a228525e6d0a0c6596b19e7fb228cac8fa666b1541a7ef5ee92470019d37754eeef5d2442f640afae0fbc54107a2b801115ac8f4565c813696df4dbe1b420c064156711ac29e36a68a990a2e7abef7314300a58de3520a0e0ce1f25c320825d330512f1a3d438f71f8efb7be8d7e48bf19dd7a42e5f36aaca783dbb1f01f9abf74f45399c3b1e40f3569691a2d84e674d3b299da7f64c4f4dbc0606755d863e8ad2b824241a7255edf9284329b26c4fc26dc4219bba513a747825b34476028fd77a108e960205b76f8414ae92ee10b626301668c12c1ed700a4f2621632b44798d45bfb22c3cf24cd4bed205577434218344a98ec8ed632236cdcb1d3335efd82dddeb1552835ee6c6ac9c2fa15f20dc89bd60e7aec1c0e3398f0245077dbb24a6b4e38a9968bc687941f37d2ac9720d4d3443654cfcb29052a0aa62eecc52f93a934737fa3605f02c8c9e578f56dc10ae714a9639467e6f5559a26c593549372f292c5b7ccc8ec9b9de21f7a3486f80bd5d4f5d7fb36239d8d859cec0c5a1701035ca0629f4d1b781c7fffaedf1e4df8aaf703cc42699780dc6e294021967e7d50bb61c701e850962d398dd5447e49dce7ce972f0827d1b04446b5f23a8a9b2332f57b1fa55e76acd7de71abc02e187b0f6e01e6764d9dfdc27eb5a7eb8ce153912a2f635e90b7df9828e87f65e650672ae58dbc520f86e2d88886c6663470847da095c416a793f6a78cce801bac4a5a155b4098189ae514a61223fb8a076962b43856729821d4e71ea10409dc3e836337103141cb5fde7c4c0aed79f8dd31c5e27341e1ae56da614a1dd009fc17467e0c2a232df7ce2e786206efa7d904723e170b7119ade1c5f7d31dc4622c488ea2806e13c1b5b82e2e7d8454eb191dfe20906271448ac7bde8cc8e5ad456dfe84e4d0d95d5953b595c6c7bdb9673929edea67ab0050a3fdd3f7305d114ae1aa9271a9d1f8155e677bac1deb748bd1fc5873d9cf35c5198fa3a0c0855b7835147bdf1816c2655ba4d591ecbc64c18e7343898b992102d0cd8d6ec39deb15ab421e38a2880432e371d9416b8ee12c05d912d8855de238e231bc317cebca655ce09c574288bda8f52d2df699296f0d627cd4bb12e843c721ef61da6f3893d7a67b270539634e8c13e4c94e8038a57886619fa0ba63673d5953a4b25be0d61af687de56bf611daa8824531ee29a1465e53274ad60a4b57cd3f7173428b9ec44fff8f35c6efde6a5cffc2e2588d4062d1bfe623d07a36a9c5c11760fac07f836cedac3e1af3d2cac2430e5723ab37a43333bb15e0ea408d0062b48487a3d5f9836303241d0a8da44f2c06cc7879e810ef545356bc18a71b15c6ade5cf0615d88d3ea24d1c2c553fb20ae3c1cab76647389737f2ec8d91fdbd4929b44ea17199daa9a3119b3df5da6c97033f8fb257a2159cb722a76a70fbfa3aaff1b5098463052f64bcbac0d3da4552d3cdeb6b23a9975e0c13ea877a315bc93cc864d1e6a57f017cd1a84127ca4580f62b079cf45b838ce134bdfb73981ffb4e6d08291fd66276e70f5b26d27f8264c9e161c000134a2bc182a160e207a22e65593f0e9b5bc3a4496cc7874424a62f5d3c244fb3ec7c94aad9e0098a84b34e153f309066745b55ab38c3210072549ba03eb10d1fbc69ae297bed65c99896a5eb9da563305bb553cf621e71057d5fbf9c962c27b32c424f7eee66e65a8eed33e05480e0caff2dd16a168274a9e1f2ed236722ede6865c6d68fd3eaabda273d0230069cc10ffaa8f7f584c31e0adfdffebb51791f2b3f399c7a2094033d57eb567737e8acb4d34780d3bb33e3b5cc8991472a08c7d1af417992f259dcc3ce5a8fc6f6744749edaa854c3e98e6d163fb9a98b491415d426c910c3f798c6d1f3612f019038003d9fca39017d027c793eb1c8244e9438e09ae0f21aa6fa25b9a9568404b8d76741906e3a0445a41f54f4a8bc4606313481df9595d2bdfaca6d430781abba333dfeeb7c9ebcc0287d3ffd4561729b8d6ddce4bd62db68d1a180b2219cc89d70c86a11a43b5b16bea385ace556503bdaf9b3d28b63846104ee8f9a75c0eefbeb5c0633d8dac8329663fd76428ba85c827f7a7eb0f33e7ccd2bf59056288070414824ec31b2f7b2046db3b76292ec220058b5eef98544f37f82af10af3bbed459c6bcb03faeccd38972d956e9a659208c32045294d015b37734bfbb0f6ffa8419501f74915b52af9a41c7dd6bb4242270e0756e951166e9461629bc29fa4ac7c4ced5d52adf1b635876dbc4ba333f5ca0a97c8e62cbaeb3e2b1f0bc997eece808282a6a03d21366409ff9f332ca6f3cb57b03b331c945fb348318b537c450e9d9bc2de9cefe279871795af3f2ae5827f6f1b13d2a66880b2118f4502fa57dcafc5614987eb0d90cb214a92a4227dba3b8bc80d6cd380ceca6502d5c4170c4640a5d62640513fc1800fc81bc222d3a524959ee9183c702c424873f8408accedc31b44e31162c487763d328f919999c836edca7ed79801cc3ef27543c93c368c814340c136d63c364b3adf0a93936585770505c7b4f5a98454fefad0c740a8fd0b334a170301bb48f68b11f11a1b850509d2e9158a634f6045fb69a94247bfa450eab42efc7397a0f257bb3d2da378ea13dd28f289cb4b121a25840936208a868ba30a918adb5418f4e21e83a8abbeca9634e5e34a098bd4dfcf78113de02e556fc55bd7db1d73e7b169237f5ffce27865c5346766d70bc94f5394e10012f470fdc86a7889e7bf3e2d397f8ecb6cbe66fb4b840d1a75e2834d3d7f7daebfc6560cdf9a17ee687fa85d2a1f7eb8699a90f19685d180c758ea210cbf8c65792c009c8e2d64c47666f6038a0217ac12331d94d7344f8c37ea9c35e95755784cfa05a31e24fc71b387e7e1af258e9967857e7b989ec0f52e52bece2c4ba92878b89632c0a0fe12845ab5fecd4e6e8a2aae6f18df9eda6721e287d1fa933815ea2b0d989d874a0184f5aecb20f7cb289a8c3f5a1eb5f3f8aaa3ec0dc93903cdaaa6921ec010a4d960796bd58079c37b57dae269f47e9613b5e0a745a91ab348bbdc434f52d76232f52cfa98b8c8fb86991fa200195b7c09737538c714277548149e5a2ea32eb5c53463b6ca81b58df95e96eabea333284f0379407065b37e46d91f71c36ba2248aafe38903e3fb0136a04677991382d9e517160e4fb6ae5adbbedc50acdcfd05bf2d9fa0fce228fe5653f12b25c8d9f285a7b64f0ea0ac0a95c928cfe9e2cd2acaa92c4c045bc6da9f90688185080340d1337819ec95811f30d0ab58c508f21ec1d3c461bbebfcea1d297e5fc8b0e48d1186520d8615ceaeaf5ba101249c5c0fe7bc92981e5b5f996686bc8a31ac07a141e2b779d5887baf0e3a2cef47d1392dbaad5cd6e0e36af6ba157c407b2ef7f5fb37606abd9a95fd048f29f17e4b5f7538dfcc7fabc6dba0bd8779d071266f875baed090dbcf9a667c00d7c3adfc3d95c306bd9208c5a9f60e81780ecf444a0a12ac09f85d12250b2b407c6fd0e82563903447bf2b20acaff383186e958c659a07bf5e8dacef2e2b9f7025c6b3587c77cf157f48e9276680cf3854553bd5e7e4b3063a71f0e1aed43b70a896d329d4e26771d37157581c5f30ad1620917536c4aa0214d29a0c0f112877f9738a0c2c007e5505b4700ad83f93fc5d3c2583ea4ae8de59fbb129804f611f4fedd1e6d614781528f9c15d54893d4a63f5ac6a16741abb8e3d2a9561100e2ec3f807bc065aced0d2143527fff59550b785572daac418ae77387e694ce85f817d38ae5fe46548040dbe9b9dbdcd19509733d0ecab56cc1a397f9e0d7556c3f639ae0c8e5754b566f32406ed2f62f5b00b5b4afed283204f01decf766a9a9ac1171304a7c68b35850264218be2ad81b4dbd3bfc141326d5084eb572027fc7c2f29e4a041c5dcfba3a3fc6eb6fb397ed4ea6e01d145d2bddb966597d13b697de8e710d8896a36e36dfe4dccad75e2821a6f5a55d968be7193aca9cef4acbf6d31fdbcb0eb26bf88e4351fa6e14e7a3779c0a599e4c396e5cb043c85b5a11c0239d81f1ff65cabe6d833c59b65dc07eec84a3f9d4f630acd0068eaa529cf99bde847d835383da4bae64f777a8d36a050603130ffce5cc89170f72d4c73391b35d15212537a115458a2b62a44ad3278043bad047d58de08a848fd0391eedbc6e922ba7b17a92afa6982369f0605b02f710dff51e106d89c9e14eb093b7ebf5ab148063feab4c311f5cd3457ea17982f43976c056f10020e744ceb051241f20888ed4da5653007247965287ad1aaf0bcd93e779c7a849ed8111f7d5ee58e56f5d51dadb6e7b3b23e12cdd5969b268d87319b53fcaaf3c33301bd3fc8809dd6edd3490c28d79c673448545e537878fe128249fd8694ee421135b48f9255a393bdb26933237f855ebe25e15a2c4a249bc8c72c02dc5d583ec56bc95b58c8d0e60c9a49c08a55bf2db011fc974c4a89a761caa56cafa76e13ae834b6c775c549fc2b71274042749c4edb05061bfb2d02b4fa5d931af883a8fd59db72ee366b4b0da67446828f4d1544b745bf67855b87d6883ba0dd073de96c2547e011cb1fb5d06d9c99db8ca10b011bb0ec783738e43ece70feaf9b185f2daa2cdafe29925809e587779a2b338b955e1cda925e079828c48c28625d0d15a094f9a45c23f6f50a5425d1c315292262aeef4bd112904266a982738ff67f99c6ba501cfe4c4faafc836cfb88f17c393e49c1fd96d441e9b6fbf397e69c487cb0fecb79a9690482085eb601d039758d58dfc35f28508f3ca2b64c4c4bc518f811e8a7023a01b4797011966337fc6466bc0f86db1c072741f2412e31907692974e2d39a5586315729d8060b2e04b65b0b4cc5d6f53eb8f4ad24e51a63d7c3af872f3a0d269a66e57f2116a58e0f4925e0df6f4906a083629f1e37af456980c6de874c6329f116cc44774fb0ff7fa15b031a64d5aa65d667f88c101aa2f5d2645037cb5841aa4a3cd39e1a329b0a6929feeec1470c162dc735c30d500ff7ca8140a95566f2ed94861e69f3b0e87b1784ce9c1160180c9efea48ba6b51c1765c66a2c1015f1c960319176511c0c336ca09633d1160812bc0adcedde79218cc7ffe52ebc1d44fbcb748aee4e82b811efc3a96642d4b03fcc5848f2731a67a751f8b4ec1c19ebc0cc0812967614aebf3af1070b1b057740885265f78c290a802c33f71a3b44ceb7047a93a81cc929cccc4071efb8cdec432acbfa0f0e117574027a83dacec91ef810c5fcf2006562bbb10667bb2d7ef201257d055f6e742fc803fc9948339646476325ad58c936e5755d01210cc3f86a7860b2394c084292a4fb75fed65081e9d4435dac87226be164a8c2f144606ab413b632779765cbd91f6249166ad5c0affeae9dd89dce06b3d37f8eab8559e396990713e1d739c84a982ef081f762f46772a5c62e2be21bd55bf7cc6cc2a311fbe66cefb0c4c14b894543689ebe33a3fd3f6542f02e805e7520b1807f154deb919f68edf9e54248b32db94e49f680d6a4dabeb98ffa027cf423c0c31f7c607802a581b56fd3ae1f14b4de18556063fd81c6831dad9cd97f71b9f012f126cf606afd631897c606500125ed17a8e9d0ca3e393e4049423bdf11620e82cbd3669214069d114bb34f9e749a669f23608a13f4189daf40bdf2ef593caefbcd1cbf2a4ac73a5fb6b56b4af48c2a07ca0cd734dbad757fe1aa5bafcf5d5b3fa7ce422f430655729329fa6671eec5669cd69eb2b4391473525c147d16dba1e3868ef9578bcd09dd9ad7197980510e64856f1c9c6b8d821a9a79d2407f03627a13c9b716890f32f5605cde8ee67abf6ccf4d6b5dcf4756b8806fefd9d36b6a0f45654c17c821dea3d521210f0d5944d3805b055f1a21890eacebf6e98a4f37541d8d8cad770c44e1abd445b71885f942adb8b4ff38b441642f4dc6427a11c0530a96df97249949eb3c7d1d6bbe151add72613d28bcd52fc19221626e73a1a68e1b03aacf40af6ac779d80310daa408e7d69e54abe3ae51bad8d21ca9eb279e01315df9f921a00a7e4d09d44f13887a8782901fc13e83caf2a553cca74036a71d89e166632bcd4f4c2d00789d68cb950610c4267f1f8dbb621a9bdc2fcd56de73e5988224a292f6e9847f8fea566356e9f1f28e929c84359e933000744cf5f71aaf72260ee09e8b480f7ef6576e193a30f5bbaf3d8969042640169468e0fe000c701b718b0bc61b643517858d2b8ae0f4fb04f77d030d5df46d18e1a3ae2b64cbcb35ae1fc21681bf87f93f11adb682ce887802d00fcab3eba69064d90277667022ce344c515010665d938a3f76fe1377f298d2dbcb44437e3e830b451c1ed963b062ae2b572baf23a32f35a125e6d347d86da9520679b34b70c563c1742f17b4e600c686113bc45ef047c2e76b892624df9777168c59e890dd82f0bcbdf39df7043117ca199b7477ac34ac15a6e469b47516e70793d71d65e610840eed73882a306d9d2851d9450ad1c963d1f3bf376756b4699a7319570c1e6752b25ed5510216d4d49174aa7b23fb3ea340933642bda2664915131b02d197ac2781a687e22ceabc28e3745abc973e41ec89fa9c11a0c26bb9ff1600b0bff3ee74e5cc11aa68df17064aab8f8b8db50b93600e3d6febb55de410dad01d0b43c4377194258dc29f1f9c2c7bb3cc893b686390db7d04d9d5ae6962e8cfbf8c69b4168a13a13ff3f271b9bc851d2c8024bb29a727020807d2bbee02b5948de542541a6e87cdc5bf2f95a97ed2fb578e25a0b78fc98e6453687c94e13e30b28135db3a86f9e3674d28def55e841a99e47000ef6b8d7de4dc541da366d95fd953c621fb57958db30d3d99c2b9851de1812edce3e05c41eccdb8b783b1fdcfa4bd4aa02240c887566e69fad8585bc1b3bac079019433c84a37eb4c18addf1195f53fcfaf3532402d0c80a1ff5993f1ddab38e9823eb038d6b5ee5ad651934d324adecdf4f5957e921668c43b9eded1b09d3e90f393e5e4da6476a08a358c9fff30a696f19562ac406393892e8bf122e6ebd8f630a49ee30c45678afa78a933f379d8f3923a0647b57cf88b8b9b2cecab25bfdac9cb25acbef6caa0775a2e2d065719100ae4840861c97029261db657315de9b5cd165eb1f56642d1c0cf515faee87d9a88f193e09652b9fbaa222f1db71811ce3b600122e7c522d24926650e0eba923864b0535238fa43bbcd2f8b8ee9edb1ff19ce432ab42a206c2390c0cfb566f85f8d78304c2dfa7b146140fecf1a25a5c8e3060cd45360ae3235cb1d5ff3fa0e09a2721e4ef2c089d06ca1fc266c1955d4694e45352983ddea0fcc5d1265baf0727af5fcc075de223642d4523c5ae2b0be91f88e4f758ee8f68d550df3a20a8eb931a1fa48bc13d37ee42afd090c741529d1ad55d65ca69e368b3e7e10a4d810cc69fc285e27f22257170866121d625fd9528e32102b61dfb6b0189629c545754dc68e3657da6c86e2be1fc9049677fc1c174f12e3f71049815c5c2327c6d6a5069c9c59e5c663551d3a19fa9c9604cdfa609c52251e4b08ceecc2f5c41467200082eab4ecdee82c22358feae1c3f46ab7148f6d7c15c18a7c9a704754f5aeacebda9a84182168ccdd14270057c63460275d21f698a212659a0877b5741089faa8f5609903b486300414029714ab36f85df792acfd4a554e895e502f969aaeb8d7fc39520d2b84b44476fbb041aad3718b3465199057134f0f68e54fbfd89aff14e1a335bc4705918f54e96aed57d59bc9e2d629518ed3843a56fb2c75a69ee63dac50ce0d0471b261bc4505a1fbab586bea005b9147f8740ab3bd8be5636f5f3137013768c0b384e382fc71a06e08e77ee0f59154f9772a1fd262ed452e2b50be6f58b085d3fc1147669303d76523249de97ff99acdbb9d641aa1067931dd1c506c98d91ee13cca89950b827b3dd6494609f0257dfef80c6179830edc00b391707390d0ea8addf720aca864b9b0e1f24422dafb8a4c338d92226d46ef3fcfb0e9e2f78ba44af9ce68b5f5d58ee4150646c864d0802de374d1bf02c47bc4fd95d61ac7ca9dc7805caab85d56dd9c0a58fbf37064ca0e937fb9185bc30b5d99b62c46bc32d7236a75ac4806e24b24512a61f7e11e693ee9a5ce3345d51d504cdce3ce603048bb8ea45421873e0dc069ecf40588ff7c4efacc3c7b70b3e8793f9b33b01c054d60ad6bddca3927f3889d7945cb71eedd6753821f5d6b28ddf230130f9b47e4b57f6882232ccc10c1780b87d9916a829fb6c19ecbe98ac8499c554eca143021414eba0dc2c8cc4ce2267f1357a49ef6154597c0cdc79c641e4297d2146d09d9a2241ca11d7ff30632581d7ba7f14b825d4c3d8a74fd16debffd200e8fee281d23762bc62e5c6c40e0eae2bbedabe43924779de01b18e1cd48c199df0c347796c7506d23301d302e984fd10e6018e9f40074b1708c3baa4e5f12e2b565ccf83b58095d269c7119a4cd8b864b105e72d944c508f9382a8cd15951648de7698fc3dd56407b844a671e80d75c43c0e469536835cfc3dfeb8333c90a2110e657cdeab5a3d802df1855da04a3fee72ab0504dedfb5c4f7bc625afcd92431a94a2683483922b81a8dff9e28cea4e25c8658e8fddebb4767d8a25c4f735756efae832774d76f2d72fde97f75efc904931a470d7bb9afab76be74a00d8192452fef63ef67d1d7526f44a22e4ac54bcb1fe0a31c1f286049f4c0c568b3e015325e9d16e30e18c741590cbc183b956c441880e0efdb9fd85becfec77904d6d186234816b753d5edf650fb172ca77e75d314951d6a3a3bdd735151452498a39568ee7e6adfe2bcca625af9a91ba67b90e4b1f59eb3577de7ac5887abfc6be86b60b2bd90cd1edc9f1c8784b0621bdbbce015e3437c2ed2ba0afe9df70d88bc5ea0b84be357ad60838ae1e8b081f4615161f7475bc1e82b5ab21657d4764df4f37af6b939d9d1192c00f81c8c229d8398c2e5ff5aa1117276ea3f52cd1ec2be623b2d7e863975ed96fbae8c0646bf1b056964a3bccbcee4e21ab3f22c3983a6478bb77c3e541d97a93edf0c0cf890e8a4a8edd741f2ce72016df82ba0058b5901ab14e15f95eebb52a887a480d422a7a7bfa02eab79ded7b9cef18810719baa21a5bd29a3b053a0584fb268503a33f120c402fccd529816ef4ef71739a1c9b1589530cbd59c0f96bd1c5ac1ea8588359b32201b4ed3bec0448c052427c9083279991234d566f148f5693259e2d8949dd16a4eea6974f0b3c523c9f6ac5f3511e95b9de18afb1f95a112f6a7e1f0b15b41786c97c82c029d5d031526446646ac9c049d7ffd6a19b59577e03b010991c6ca1f77b4b043bbf85c6f98bff2a2fd4f6e7fdd251dca437ce6c491b90f8c724ef15fdfcbcbdfc0ea728fee29fc867d121772d387e87ed233ea53e38ae2c60c17f999f585e469692e40b3079cfbc4de9a6a23bc6393056651d6a6eed6c259ed122d95fac963fffe25e6ac33f8d7f5b0f6bde9d9dd6d1864181649fe80e836e1f6a1d1f29aa8ba4be306e1e04421acca4b9b56763c546f30e202ab28952ad0ee2fde236c06b854193e96bdac8a11092445b1daff49a9c769bd1f54c276966e34efc3df2f20acce69645fea145ddce8241b1caa028618fb6e26ea19929cc337229fe01990e2b57387a3515c16d59f6ee683a992f859353561b82268b5e5b33992e316433940196bec1641b746496c3e87b63142c92b05359391655fa75de8f1a661d344315f9ec5fd9461b99d8e0cdfea52d643cc76df9f93cdc6ff61a1b8602660b9323e9d7d55c67709513f7c5f5b02bb560ceb5da35115f06b5aa221dd128490207ebcdef049755ee0e3c6352825e5edb592e9a150afe9e5113ac93a2ec87a159d800287a2cd5637ad9368d51102c46e081bbb8c902ac6da700f3e57648fc21c37b756821de7825a9c020aeb4b6b4e8a260e27a6563a22e3780438dc3956f5d1f4e7ddf5d880fe5801d0ca589a0b4299400e40e720a175cb52d6721ea0f813ec38c6582b5852af6c36979262f0267ae0ceee21e8fb940412a6707653435fe0c4bb9e51d127a591425bf2f2d6f16db9658578c8bdbfa7b01f4bba6d59b306dfcb2098ec4c524fcbee5cb9b6b4f5ede59c1d36fbe468f8c59f649ffb4147a2ae55e69032fb948083bb0015a387a69e82dbd6e635bbdabde511cb16dbd09d4cfbf43997f76890d2ee3f808671e06d4c9da089c80d2e90efab88c7f003ded973f0c03c54cdaf38fc5094d1da19adfe222ccb4c57d659ee9b15e875877666953b0b4089afb321ea820165499c0543bdaf92b783a5317a0dc803a6281f1d77451a4bc03dd109e321fb0ecdaa877996cddceeae2f05c928b3490d49499673644da1512ba1e4e06f5086289abe0fc52bd47dff970b0a7c84e1a3ee56f9894cdb69987b7deb8e5375b45ae0d0a8a26120ead2c2242453cc472822062d7346c970c36b82f2b3a669bad9a675d578b07a95d0c27ca017350ebe196d405f4086909e1752f1098a72dc118e360ff3e4fc20da477f586d067699ad2deeab062f783d3941406e65e8c46a29e44504dea4a4ea22eb75acd8d6110bce7f187130645cc14d814594e3b2deaa2605f716377ca83f82e793a30f9d0999845140e86fd7855dac5a5e102aadd1477c0efcc4acf1078d1f0cf36d33a8352c7289befac5aa486544d794b04079d71a781e57a1faefd7be7b6723354e8e068e891bbcb1f4d1b47fc9f25b35bdb12ab2e25db90ed3d6f4414c7feacd9d2fa5c2fca6c70959b782974a3f8a65425dcd723735be6ee1af10f2459871fbef5fdf817d026f302c0109708c6e0b5910733301c97716479caef888c9b43af4eb78b0d1ada86a75161dd361c1c464613f2e0ca60bc8a9fb64f3a04540f7408e7b1f2316f85bc3cc56a1215e93f79b0c2c0e28c396e09089d6eb982f7d85b6b097664177781d1f7caac044ef96dc1d5abdd54fd0f3d125d4fce8f03c95b2c862844fec9d03589e1561ff90adec233911c495617ff3be3d8042f51c9f4effddbb6e2c6b4ef9a4cd45790ae2f0805bbb789e9bb948fff34bfc0bf16d4d2af56e0f327586a05b0c281e7adab9e0b3ff96bf8bdc6c58d610b667a0f1134803fcf81c5e5e55c9f278cd55374129df75d56b60dd888f4b7e4788c445834f880c1d24beab94892618ddcd1a02a9db3c39125c844d783839c36503e3d4a1decbe59b475a4c1e8123f900e0da55febd889d081a52a843dd418aa5ac1f87fcfa359e9f871bf37882a934b0d681e14a7fc0f1623cd2f271e40cd661419285b84112ca36ccc79ac983ce51b68e235326c491f0439c0ef5982182d6e4b14b757e86f3cb33741f8f376ea0bc1138fc65e06045acecdecde80976744ce200c9ae86f4ad95b2c0466bf5755f2e294e0570c97571885c8789f8aed4bac6afd1994afbb23d6c11b9059ad133f136e1ad3767a1fd845950a1e8abb12e248aae37fe0f8c3738144ae3c1b06d7602dea44dd1949d201a2fab97da22c2f63684da7f780e503ec4bf56fee5658070ee4186bc7147d92b9d85b658c71a8e14170175ba202b4f3c38f8f7433283f7ad29f62567b7abb71463e7c8fc4cc4ef5256e992589850d6322c355f622f1246920df5491eb4d329952018617806bcda18c307c502757a7d5c1bab6c1f143c8115a4b35663eab583ae169443d2e1becf8e4ae791098845a2c376cbeb5b9a7f1f9b47f7c6ad755a55a40b8a61e55bef07898862f2b98844c8a71c867d1fc8df7e1fcf8f22f2e9ac9a566f9107037a240bebe5e8bd53de1506c7e41e2ddd3b91ac615977f6593f1a590abdebdce78b3cc1d7f6e0d701681b575561329f27ce3c8c248c762afd22cf3a75cea5027604b451ed8d202be3146cf5f8b47331d3fdf1ee47ec45f0de950e697e51976363b4d01b2d30539efb45eaa261efe32b9edbf8a84080a309075d7de14e59f837da100a0f4517fcf090a1cecca250859c561c505a374ed7b3a5f02fda9a7b9135d4fb5791d5fd8fee012c5152aac4ebe4076689e9baaeddefb68fa0a3f1b228612643703288aea5e9dd7b7d819d2327198a6122f3bc16ea1e92c45e6c9a44cc685d9a928c58065a5421293642fc29cb4aff5b3127c1106cc9d9bff2b5e2c8e805b5d80b72ee0b9a4b1b03bc73e4eca2a0672ec58c61b51c7fa6e56f40efb7f08b9224840060baccb640a79c23d0c05e8f712fbd78c10fc6a416104bfaddedc1aaf1c14ebc406ef3b1954ae0af9e8aab36e0f3fad31bcabe0e9380016cf99cc999c48f50bc7e11eb12212c30673e290eee7fc016dc9404771b038b115497623883a4637afd546b0e12f4b434c0ed7329a332023f846f88a5c64280968092cdb4190d282b794e68d91136fc6db08730d295b07a256c5f8fcccdce0123adae653a89ae9dd883645ea49490b868dd65fc2d1ba5cae734efbb81065f0373d918eb7adbc130442c7beabb3869c0771d8c5368253a796d115623b975014e6bfc021ab639781ce5f5828a76a597e9b9fbe825fe1475b6fa9949c2f42dd9fa7e333844552d992c49997255ef767f7a46905c1abd9fccb39924e55c588fd8536016fb07f6b34611b4e08c167731136cb36a970695d2e8d7d171769fe14c499e2f10517345d50c544d784b0730bc5dad15ed67a13063b61ee48b03980330eb4d018f7afddb39e658cfc4def9760e451da20d3ca2e57a30ddeab937eceeb0a3faa0fa109b894902034042acd7a318e35175faa0f3a3106e9effeadce72e235771c0e894b519b6412aeb65d20c6c17fed3dd54c8ef68f38b19dedbffc3406027dbed8d30eddd370d9445114893db69cad05eee360bc6e5c1518fd451fe5f45cad31ea324dc21e133f206c206073ad5600d8e6dfd11985734ab9d119c2f50238e18dc5f8cb560e9b537d87a9fc3ced312482001c421e1cb723c8e13f72d1d4ff5c8b42ef9108edb109cfc6b5709b3c1d6f6ec6a6bce63cdd87c132f8ff79720652eb311edb24671cd65d14d6e7cf179ade85adb216b559a1f233d0ed49f6e8991be8d652177a13a4f4d4ec81d73a396c7e2727f150013c29c9b11073612d9ff270df6f81d18b0a22e849f1a6e29d804af415a653bcabb8d398e0d424aea2c4149254157343861fb983ec121c825ee4c4afbfcaad9eb4137e93c870539db92a426c2d931c89e5a9903965fe4e275df0e24a6c8d9709f34a4f2bb7f8c58cacb71dd9337f569f042adcb75e0d5162056c961429e18434aa021ffc5337f1e2d7f7e0b5143a7f5bcfc94417b1f63ca96e3f65d3d272c87a40aff772854c4483f494588d6ad65d389de68fc4bb4036e59d12b6079bedd2840ac18e20142720531b51d527b49a0e0f2ea1056983383ca91cece8c18bac096fe7979f404c658f88ae438e6d7a68f8cd3930b1f75c9b1ea0ec204f4f02ca54c2fd27c5b6e9f955137fb5755bedd41c8a88e7b1a7ae8247911e03097c21cddcf76b9c5f89ab12bbaa708e069e14ccbb4f7f7f4254965624d0c0b6fc3fd98081d47bab326450c2c322e6caa7eca5dfe647e81061c9b1cc2e5a080962d263661e863c6044d71b8edd544d5bd061df6c2da32882a950b8f66acf085f33fab1c2c0fc608dd925bcbbc4231583fa7d7abd3687fd296d14e9c00460babfe39b760f89d94edd0629c697de110a0ea81e89308856b40b282de694b2a2d82dc636fe1a9c2a577f64773b97e80e5f23a5aeedc5145f1ac68fae3e2622a01cbc2f2856bc463dcbb7f5295c2f8847951112b89d27e322a51a809d7d09952862fafbf1b5f9bb499206bb5e6fe107f0df0e5f69eda205b92af2a66f78dcdb017350fe855e5e096d07ac2e700c26923976f1bfc754f0ff76947dacbbc8dc4d4485fb050c78b94bdcaf8bfbb446a813a34ad3a938ddd9b2a4dcd10a11d49dc3ec7c528749028bd218152e29bb1ef33dd3693aedf3a2590f854caefcf6115150f08bc9c9224bea19a96c7b6b14ed2aa3b83e2066192ee0c828263e30e5ed92d370f178278b699705925888d40889b0a3328192e1a101e3b0172aae451a45f50a5006b70e88015308d89a9f3f75c6eecfa579774ed4b2229cf9e1f06b4315657a11fcf6d7bb307d91cf5b67d90afc8c708ae5e3fdd19fac33e588d076d19ca7d7d255ecb0a9ee1e96782108dac2d5e39a87716c1a4e63f53799ecb06a9dc1917cbbb8158ba9162c8e11d4be69078fbc2b3ce04cab6069445d4f6c94b8c5f136279a3eb0d6524f98d5b5ec3c9d7980a0a2cd48426c1940d2f9ae176b2e46b4547fc5b80a25f4a1e9b9ef279ad28919cf7193421aa9fa6b794b076d970875bf36d4e2c3c12e3f953a4bd331d92f242af6b27d77d49f89b071cb572d4b365cca5850a6ed30666d340bb3a3e89b2a11912b21896a3099dd78040a3bdf9394c665faa56fce2821a4abea2d3357df1226796106daecffc47563bbc3913b9da99953eb2b9f0648c7d2981ea77d66fa591a2e5ed3bd6a52a2e87068225d1f99fce9c266565274d91837eff9b43e909b3e4b632c2dacbce72514d9e39f709c8914bfa01c3a25b10915b62d1df2fd29ddb7cf2094b42192498f5bfadc97fe113a7bed675bf5f7366262f6f2be22aceca5c8560e29c70048b3a09530565e2b87a5a533a0ab2bc7f0d12f4ffc224ca35adc5f2ca90c00616db9fda74f84d9297b32793d3f78c2a23208c14f526e2b9e2a03752048aec162694506f93e0c1f9847e126d2fe8ccc563ae286e46244116106f6f38e89299c9b0c0e2b47e0e68d1dc111a5309eb5a7d57e2a94194f64396a983fe98a4046f1a4bcf81e0ed16bbe34c6075e0fd1ad9fed07501074a995eb12ad9c8a2279e3f3c96e7066c6c350f3fca416a3586e31a53235d44a6ba66bafdd2182052f411893800760f1377bcb03f68cf22fcdbc5ed1d55296a978b2fd36c63372c22aae255199fb9d21524e628a2effc14c9d5402afb7feb4e25502c73cad2eb94905a47604760dc0e5a9ade3e618ee94241b31728a22b600c88f617a487593c7369cf97bdedc98f3c3a2cb658181009b95d06b3522b8d9d7860497e47b16b4932a9f3f00af85211b81ec2d1fb322c0e20edcde7a51006b0d30c870a41d4186070eaaaf648f3da3835970670fff14823a264d00a82794a3810c5eea7b117f924ee6a857690184367af6234d9d018d730b67a332ed6611ebfa8f4217412bb9739a41755de6dc8dc2cec442146de90268fe7fb0924384c4b7fa502cd42c0d886bc02323256632bf526b707b0564b6ab67973f006345d828aae6a0b2ada5492d632da21666c4c1201a4559a9b138ddf2ea49cc6dfe5ec66981af2396db29b5b44b63b08a060a45c13fc60d9af82286791caf2959004ce35cca23e1221477c355368061448034255009b6fb62d32a2130cbab32a20cf411add31c3a9d1dfc551b8a279fa433959f7c71c659e8991f7ed3ab001ee65b39f8bf267a235c939c48ab00e4db3f9f30455d6248c29af9af1b475d3fa5559059a32650a8c4aa6612f920a559a6a772bdefd6c906adc87591dd61a073b4a3fa9da8032df84b436bf2fb9979e747e42d7b6816e7682d25b1a2139a4b1b2f95152955059c72a528e454f7695256022434c2191a2f308a23bc81ca77827a04381e9db440129ff41be026537f8e0d8a19df96d3c38f0c37f20bfabf746abe36404c9c3262aba5c7802b69c16a4bbecfd7e8ae9a4f59c6492ef181e0f6d2f7b3fe3f5f5ebd713b8ab5eb342870328f2804a54e15037621564bf57eeae9e41a155db5ca237551171aecfc5b6769bcd360b94645731c95913e96477f44e25de7ec922af7a49e50ea669d303c011b76699a130daa1e82cb283633be83ca9c9485f0dd78f83e0eea63cc3d1d1434ebbbb0fa24a14397e7b97dd744193bb574decce927da4f8ea00faf608f3fca00058ea693238787a09f2e7be5b1b5a12d33b1c9547c9c2f785f85ac0b4a5f255b9e4b196ce71aa995f9a1cc5509f98cc1d4f92b7111ac094aa36fe85004567ab87685ce9633ade37b79ddab2b1ad1bbc56f32f80599335c395ccf1174aac0da1bffe5bd0b3966ba1fd3e088469973a5003a2982f65d96d0dfb17dbdadffc9b53a2fad85f1f8aa72539d7ab3a77e3d8ccb6d3301bc9fb65c1bf71bea0789ab8eb2e376e1b1c62d82e45d464f2457b7a55a5e4cf0f822165c0ce6115f111f2645352f74a01e5be0663482ee48e8dda336ec3f21e850043c5d8261c1d3d8e925ffcdf13a703970d1e271c491cbdda263bb2712e49ea603a0ac7e8a3b9d66463533a602993db16a8e21f62f0e034259e77b187a247f1deb5d108f799fa58bd4cace198b8d4db2c08ff140ac328a51448c8b6516755e7c3184a1d68589d12dc830922f40e0894629923652532e813756766cf68271ae7e2ce2eb25d68f92f4965a7d568690ada549ea54f898d5efcd332c467f840c9222c58086de813d8015498a9f153f631916db6e2d1def33cd27a6035f2af96aab176c587e5172860cd5709e79497d432d7270902579d5d8202abb1912d15313d576eec4b6e2e016b61e62a6d81d6f7251bb4790b363f7e08e1527c7798da9db4951bea1fc2da6a11c96a3bbeb73797d9557d731347c3cffc65ca60d735aa08ab716b33ee98435220b6836a220149f39a262891d2c2f10fbc25fd3ce1b8e49a58220ac3500ba79bcba2aec6909b0e78d34bb948b1b3cf7073c04d1c0a8dde597d37ccadafcd9a216ed29e8abb390c5f15127769a9abccb1a38819184207a12c9f1450fb5c16e400dc41dd3c3e5023f125ddec14a34f14471cfffc44522b8c376c936bd90737b266ef106dbd0c513180db9cfc34acca9cf324c306c0b8681e8125cbed9aa7217fd1bfc4ba6676d2edd260afc1b83381f8093bf9905a8d491c0291aab346dabdf2284dad9598dbb13b7ffd6a1c9ba8bedc7b0c6a4e338b6f85ed8b89f10e3a5a959a42b0e6b114461168522baf19099f78152223eff295727fe372166f0f48f8e370f52de990e18eef17062471fe4036c55271c3d204fd773f40a60d4d821948a858d931f4133ca5e0d66f59e029cd8a52c40ba59fea34164677b52cab13af4d2aa7057cce42012ecf784cb88e40cf450510e60041bb3ed7a0c79d24946e41a0904bace13b2d63a1d4d48d3d754da273e99da5d089e72fa5d0eae53b4d059528454a11fd278a52629136389c6be9ef8400c247be4f76acd1d78a5301c47ad6919dd80b46fe152f27675804383d6e3cc0a83d8fc16d7d745815523a0f6bef8c6ad11306e1b9bb8464e54c201b85105a262a7582184854f828cb4620e47ee1a97fcb8900e135a632a8c348084fdd5a9b5000ead87fc2148e670014a34f058be21abf26ffb41b9c9199c9c93633db9c454e894a53bcf2c5fd3226a981767b92cd8f8936cc9303feeb2bb63e0fc832d3d1a7bca4daf9f9e5bd3b8119af76c1088e80162d78ffdfda264d378dc6b0e254bd90843201eeddbf3decafefafea50fe48a483d42d18b79878c0849b8042f4207bc090705e92c704d3932ac5881cee1aa925bc0498b2596ee11d336631d6b570eebc3464ed13b21f912d515cf14902ee35ff1358213644514ab5cfac6049fdd1553e3bd40129f6c031eae3599dde9fb6cad56ccbed92ad246bd982cabc6fe6148cf94d973474fcbacdd15db8492c12b1897ab2da326431b98ecb1ccb69e8a790e03843466d595c4b2527572f51b599eae37be81cc90c1adc61d364ce576ad6d1d14ed297aab04e3d159089bc8f1a067915b117113ae452a1a02cb41e88012ca695f0760649bbb16811d49e2274099f097b377d159519d8bb16214151f2aa5fe874fc08448df1836665fbf2bc81979acaf77abbf6ec83e8cba8ff70b953f972fe290fbf12a029f435e3e8d24879b1891f207cc717087eba29c998154d358067d27fdf6c14fa1560d1cf68ec5f77e0dd3a1cd6e2abf262b78a59c019245ebcce125c70bc42a9df21ebcd4e3fa3eb1e82bcbae08cd2cf3030ae6f1e86fa5eaefa45509cc72b730738239cd7a6ed0c0699e47a10d5523ba91aa34c2b41731dab3fd81166227c21b04aa4def33cb4f8c96af18298fe956a5d2d32d2608d18e60160e036c57e3a28b80ef94627994d4d900722556adad923b8a4ece9174a36cfb678092dbf150acb24cbec688ffe69f0bbee85aa54b4154e0d1c4adc939e1fecf552c26ea7998f74d82e6cd4156909dacdf85d174a2943467295fa87764cc411d6165ee60eac1b96a8b667dc9bf8363a35183dc14cfc9f92c0d0746dc76cb9bcb29963f5875b0d22d94c82d5cecc11a7b886b77870f45a53aa5aa4bf61228d494d9cd070990fc6863435be2f2be196457a2c041e61866ac1ddb05d60f2b97ce50356e9feda83ef63bc994cb8574fc6ad507f42b5908dd4199c026b2b9a4ce36e6e830f639f49325d8f247bdf20e3a63f11e70691bf5b873ec84dfa213a0c13bdf903b2fda18d98d7a1f97f616f4f074bd30b48cfd8bb9708cf9b82fa54a2717a639fa4ff6f44182de2c0cd48df02287084760be9076de6019658ebd35d34ed1237c64aa223fd607a571a198a32743cb6a861d980d9c59deb7a4e9f6420d07a30de619cc0588ca5c9310e5a005c537031483a1eadb82d027859c1be1f2bba02126ad3ebaed74f3e15f880c6f5b01fba74438c726da2c60969d7988d37ea03912a5ef5b680481d2b7733e069a42d00a1a0e95cb6d2660ea1663b567edc765ac7a9b282f99c6a26e93b6f74c90c66b58a11565d0ea477732189268d5d9273faf6d05f90e0cf67ee26cbccd8b2ff4e70ba7d1bb0f0cd155c125ed1ff8d006c29c9e7be585804e0598b16a9baad1974b9f2712f19e03732fc138df288b3317820bb9d5148f682bb9d6d4575c882ee8015875f8be2483df7e82f795f7cb0bf20eb17be49a9e05750741dbe35eb65c73616efe6805a8a43a1739c1d9a357fbf5ab4b8e82faaf7efd8b8e682051b11fdb262f5cad36fe5fe869850934dfc6ec5ff0e4c0cda7d5f5c35518e485037e41e072d0862ab6e0abd9873eb0ee6844c3370fb9ba2f9715019ca19395d98d97e4a194e6de82400629c52b99af086d053d04bffaae024a94721e86822119e7636d3e9ef15dc9fbbbf2acb585caaf388567ba1eb2297efa5b6d600f78f139f2c2489ad87e0c6f84a0a2c225b88c6c890841fb2467b5839ac05b93302b113ec2bc6e39c918807d8101acf6258f15a18438844543f7015c3c52486dbb17c1e5982fcbe99a5b00b998d293284e16d816f4c6ee77b5d3da4ea040f73caedeb7ce0f2e0f82fea6b25e5a60c21305ff0073f6018d74296db2b73bec510752fc23fe996f353f7e14148f70851caaa11d1a91dcf486e610d910f4ac107db5a9f1eaea3946878c9667cfd7f2e67030e2e1c1b4fa6e5efcac88ba0ecc94a7a948d082bb0854b1dcbb612fc06f68258abb96adb1896bdf0140b6a9eeccecf1c618e8f146d961cb3db8e4e872042799eaaebb1d5a5c95785f58263a218ec1493a9afc56aa48a80f565595fd03985642840dc09527028691740dbaf09ec04e4e1f8516dc943f16806d03170948a650506939ea71f44eb5242f726c6561b305bb9b042984c4f700dcc42b6092725bc9759389a47c8be5a045a2722e80897d67c80a1406aaf42717010ca54f22fc97845239baaa2461a8b9b4f76e0a569526106bb29b67b8ed7b78ca7c99f6dee9b7065898658f4976c3bc01b5a79466c736985da25c138533cbf65cbc85bd8fe2ae3442df84f334827374ec3d6bac282232691c8937e4dc448a8a60d02a406109ef6baa9784d368441d1788f564bf1eee72f3d8fee9dfd7c10a0481f82f7cf350e39ec75e26d69c9e49b105a32f710013c924871b7afe8d52f0d0f9495e956620be1becb93220587d8d313f6e495cbea8611da96227826605dfbb7f44f8b648b2284f154ef03caabe3289e19860691914c66609336481f923c2851dd861154010205add5c6a974bce5e99e71b3dde8199a6988c786519f314ca86ac4670eedcaf73af05e6f179d920c766962bf6ec34ce456fb59a7c228ced85cb4a87f26ff6b7f899f13c77cfae97ccee70084b4697bcde7dd9c64ccaa3739820e2515ebcc884affa02c535bd725712b144353c5a8a3f901914ebf269cd4df6b8f904e79c0570e68fe33a9ee4f2d82b4770aa6a2a13bb0ec90bcc39b07541b9ce6db3bdc3773fe59f2f79c5f1f8a9236e3c76519881b1049fd2b705624751abaf21527ab14f1ef61a9b047c71ca479541e5ea0b6b1e144bf0e6bbb1c897402fd70760d80394c05bea52242b94a7708d68339cd4fc0dc8abe55de9152f918a4bc3310ecc3c139ec059283827b3bb73052d0f2c0308ee3beb223539c3657f91fd7186dd467b72457076ecc82a6a865f105eb4e1c238b70577e7898797a663681c416d1446413b2ef5ee1bf1ed73f7ae95e36201d6522b4ad7c71d7f88eec22254fe1b2b9106562e434b993781f27395caedbda4c75011b765cfd0275e92b58323703682933fe94219f9e5ec2adee87d165ee465e76527fb13f29d89f0a08a1ef5cb19d226cd2e77ba0bdee6dbcb5098b99e5b14ba79e7c17852da42cd169eee0f74ef0cdbb49173a06df54a1aee7658a25d6527a917480b04e7973e57c715fbf4fd61d84a717db040d422ec3f09c9ec12e73cec01a96e2b355fde81a84ab96df1d9cbb15fb1248ae3863b196b1139bd5f8a1ba12c1b7447f2ab5c7b71b6ff99963f5ddd252bd37bb40b4102c5ebfeda55138686468af0b95d914c6b21ed209b047d0a8537bff8381f48a75e28f93042c82dcf08141f6e08e040efe70954e57b38933d93b713957f0c5c6a71920d76617fa00036350fac06eae92f4c5d572374208906b3a529024cd7b315c4804ae57b7217126195c19957dfb758b7a5d0ab814c462653ce623dca62e7e8c2a1ee5cea4d92f36675bf829aa9b1a1a7c8b55d428b0ef7d30d2228052ddeed224614f0080aaa6a17b6d783710eb168a8bd9e025ceb044b252a7fa0baf10c3251bf714138e4659c7251b6af56276fc3aded4d6d278a8cdfe407c0d0b92dbffb415089b7402ad340d93cdd24fa62bb07d390444742fc2411ce4d8790a1bc1253928b04463586349540bc553d2f9909f1c8ccef75d17ebf58fb190c2cf8172d42d9266de3efe70a2af2e5d42507a32394ef68dc4f4c91adce5aa08333f2cb4cdd440e2c1dd29b0f49acd3d18a010d7c188798143c969d857641ebbb22ab12bd369b45d3b43ef4a069e2a8f8d6f64641d94b4cdcae28c87bdc05dcc8f9f57c4d00ab7888697f6f9152d3ca4915b2b7fd542b0ac8a8f0b8d5feb3c8628eaa0bbaf5340d8e7424292062c10be33a73b0e5a14fa283076919a3a6386a92f1b3025d20c9ed0aecb5c8761a524ca54de2cffd5ed8356cd8b65d7e57da5bd249481fa025a1304a98ed3d185c13191d8ea3cd04479094f419c61b96c8356bf7be33c66b0daa1b72d6c4a9bb5b04ebf8e99c632d82808603f5e743d4fe5a47bcc3cda05f40e4114e2f0842efe1e9d7499b6d63c6f45a8a4bf353d69e77abd116424695477349e50035e9fcf7f112fa2070d8ae406472a5a8d3cbe3831614dc9d2ac18ff223bea7d1a741489111bd760f63d1be019ad9feb603f4891a02f5b03778a9156095ce04416eeeee3e1076ab2d37553529f6428fc0af83f232b8286b3f4933051f991044a236ec11a74df52fb8c9954b87c572ed88ce1686734bd1003a83cc6c0f95380c2ad5ab361f5de6af3d53d4a44d13703ba2b500bfebc31ce2ad26aa7fdfa3a78fcfde6ca4bf8bf055645d63b1adf65025a33bc305c37a853b4f49cc498049c5a0fe83135af0de3f01d769e0bdbeda229235ef3d32d7f572a920019029bb7f96fafb388bf16d98fcf7c6e311ba3c5184b31db06f7458e6cf756d6dd444ec0548bec315e16b0be1cfe3b903299facf15650050c634fce9e15fa710918e961cdfec79d0410fca59d0b2dc2ebef83804600827320289da5b9cf7013fb56981747c89bd8642c1a4e8076faf669959f9b82a56e3aef781996b64865f89b2f143b2daf90ee7a274fd88aea1887a8845a92ed8f9959c728c4e17960aa3a20c44763da6a14883157628568c42d1569591eb0202ab0ea161424e2c86b22cfa0a0272b6f842d15d06cae5150b5b46a3fc4597aac3947c4a88c5921822f910313455b749a76e01287efd9684f4e7e1b1332bd3d5d0332c7e0550fb277b2b2c97700e4471ff6e969c71ba20fa81f7bdeb47ea462d4d31f1e081ad6a02b9ac7b93e722c85781ce2dccb56c10565024627a79759834b8511047f6efa4c624a1f5545adde4fa5c3458714d3d7ab2cc374307a25d5aec95b90f476cdc5e3da9424a423aff3f335e16835ed75a16d7bb902dbd5308f13c4513cdd40a01fe272f2bbd07c1fb228571222524b402906e42f719720a38f0d5a999dc0d8fbdd1dbffdc7f66996aa656165450fd4ea7105f8de562bfcdcdab0eef9e2a25f70e3bbe89b35bd63904ad002831ba468ec3ab3448687d10e7bc13c8ebf60f79d52985409b4b0aabd0256b90a56eb2027fad4176d046c02745d5d55a2c095f6cee9aa0e56d8676d659e2f4bbd05649343641031e0a71357ea56ca488155689ebcd7ffa64eaa2d8e740f1702d0f1c29bc2ae7b68f641b457d2f02d793ff8665c255cfec94a6f312c30e6db6283d969ab6d7b8c6561e5095e18aa7d1c2ff41810d2b5a2bef893d324731a95ea65ac595f6d01de8d4d9d8e68dd04411b0f5934a2863d8bc2b2badd58bde9610921146ee7e115e871d10987b2d67f187ff1afd865affb3f9987354cc842641a9553dca249fdf404825624db6449c429c68329cc7b8fc3ddc0b645656ec29fdda21463cdd299edae42be839594f39c77373d734f44a8ef7121e5267783865d5a737edc3e5bfed53f33b732f51f0ddcea9b94e9c9e5d9f92b3bc4e1faa6ff9debe8de217ef29b7caa4542a0b9f51e21d312e22eeea00d5edfce61961c5cabf2aa9ebc6a03fd1831f9bd76ad85b76e9ec0f9724d5edac6453aa5cb2462dc3471029b6c1392c9720246a0fc137c549243f77273b16aa65e50af1d0932577ae9041e3dc92a7a4226f782768f7210cdab02d7e366313ac75ffbd589d572b6667c7781f08d23eaea6bb3f9f58abd0536f7e4e9a75381707e4a7c160761ba71757c8b445130ab82a2c6fafd7ce7e599f9f375418e4f19056f419de336da3a022f82e784367497045ad0fd44fd9b3f2b614f54207fb6b865528249c515ee9e53b28d2658820ec3b0eaa51f0d6e5f782ef633c9fe6e50aa3f5c704c09cf483bec32c421a4541cbd646bccf196e6581733caa608a0b3cb93962e6c323e486de1a2293296c692dbe39f1577c69d1f29a18267a61410ba9e94ad140e3d2f2d9fd4e3bf615585c4f8bc88aec8747102e78302c3e18d77f193da3d457f0db8be63fc20ded01d8807c12c15c707a4311d044f23685055c3f4c4384930f00d3b249dcaacabbaf0107a04be249eac7be5544855bf4326469449a0b7357ebf1232d9643f0076410b8e3791a52b3a98cac00e967dc1eb1dae4749470d260a0526a0a9d8eec2b8575e34fae1fa06fb40a8fa4befff3e7800099ecb0f0f5fc2e1d797746feaa541b8bbfce73520dac0c59f912a3eb477027f7aa0c30d8e79046cc6f9d741fa6e0a72797dd7a940ddb547301cd1634192a97c04cd8b66cbd3d89e0039b5f0b2b5b9cc96bed1007fcf56599a603dfe525959ab90991a47e77edc65d7134e92a98208e1b2ed2fd04e1abb3e4ee78fc02d39ab193a6aea9100b4464e7ecb373cbaeee3a19b906ae4d97da166cd8dd1f8fbe701f2b5dee3f0db376fcd24af0b2c38ad246926fd01529082bc8624c12433947380eec6ba5668ca06542f2777eba50cc22f99e3bafd4bc2c8b6a1402d95b20615fb2c210cce13a2b82a65e87e19506f7b348d5b13abce97c0a4a83db78604fc9bc8de182923c22272272e610849eb413cba4c4f3dc20b17179997fd176e84099b1325970c583005ffcda69937d8c21be945a35dbfb59dccec4c21d100675f41d9198883303faa670ff99e41610452c20b7910c631488667a24dcaf676e9843f25e25f1386505b28f080739b99d347b527f007698253537364ee67b9c29d46f2835799b451ab6695247f1813c639a6a1352e7b32858efe390305d500cca55f58d791ac71d76e6109932608558feddfaa5f73dfcb346124d67db8d98fb374982098a03e2e68111aa3917e5c488e517b53afec10b8dd70c94b9fc41365e44824361cf59c4465999c788a6511138130bd535f239ff8bdff0db7e05643b8340d6b874f8d3db1a4a4f7590a31a60b3a13be0c55ef07300ac3899f95087b946d4a81958ec46da3d1a1e9e6bd167bde67d49ec6626f5b75ae674f7ca14e4ecf65de6fe04860a6617c3e5f4422fad372eb2a9a5bb028840fa25f33ac335342c5d60ffb47ad92f6b45afae107af06f78b91efe97d38811584e1fa233e363e8b868dbbf26fb7459b185289bfc13d77a3305b6b905e97421d1fe593a9cb6064ba76b236f77e042f826fa834ba2d717137fe247b804e503f686b8d62966542d84528811183522c60de48d1c0373b63039fd4576b3e34c0fcc36fd7f7f139f4bb45dd91228390759aa0fb4fda9b6cf0a1dc260c4fbd3e225507fd05686a3e76f84bded0ed1e428a21560b3c37fb8c0a76fae6ae91ffd9fcd4f207314890c106cd53ce93b172fbf49f3b6f45ddc7d6db3865d46189426fb19ad670f66f8fba8040487b0894f0c82995e8bab7636cdbad3aa93d42982340eba75c296eff74961b222d157cc79bb05f14f4937fa8ac006f07af2f9d1761cfac3c84321a2d8bc0b77ca32ac39a2c4037fb80042be4ebd376e3147893b87da0e998cfc54aa6ec73ccf9e16fca3360d43623c4b512fefc233a17d87dc67e9bfc57761708f511b5a463a36d33c9d12d067c78d101e3aa49d257dbd12c6dcc918131516212a86e9b34fc80624e223ae3f7bed8246c41bc579c1e07cc02e6f47369d3389f85a0b66cf078e1afa29c98c8dd53b8f91a3491f493e17357bbb5a1e0279e923ff135bf2a9d69881249d67c3154a3365e8b82172af728a34483777c0575e7c1e75a4da9a3bf8539d9bc526b735d8e2028ae46c785be8586fdad553a95d83781a1b06a7cb6a0678c6cff043294738efba443d60375a02e929b8320dc0a1fcd6f5d0d0379dcb0f93812282734647eb782d8bf4a8c5c9b63dd2c158c0f957a2f40bf600ca982bc0e6b160a45f0a69242d75c0bda12756c33cfdfb9295630741211d5372f79e38f251846ad636e8bdd560fab095048ecad3783307730fca18d86afc5c50c462f8be722c51d7bb6c11af3475fb01d4d0143ea7f1af081a114ff1ac0bc143636d6aef5575f52aee6a2e719700f2fbda9a11815ee63d5168ece6dca9f8a36dcfde0e4659cf40b3936bc6f01c65bf5e4956155b455725f3459ac0f77da2298c17342d5c80f2dd2119d381ee1f1a8b4eca9f105a07c4790732a1c01f78b10b1997f1daee7331312a8bfb98c30b9d45d6df9209c265d31b0019b1a2e6b9c4765e36017c4c6dd31239d49f500f6f5fb961f968cf7b357db49cef974c75194fcdb4aadba06dcee98151fb406ad39882d93d63bc3caeb3d6d2f7cbbf4f5678e685ade946f53e5c580b74356eacca6b7543c403147f5fd31e7af0abb8def6d1842b0745da150e194d92bce0bd07a6c69280aee60e417dee30227ebc4c2f7b0388ce37366d1ea2c4d92f3dcc2dc724b7189308753fc162b8a1dc839651f73069814f3cd6d43dd63fbd79424113a96196b1e6f419b84037274287e1246c0db3df056f1d59636cddf926f84a7d3b04c4c0c9443c75794a49fd3b8db7d4c3b6f95e4405659ba5cf2774a5c9517c2778eb6fb7db9e35c74e585823669f27e3515ef4cbb94cf0eb72088a5b5902d610bc36c33b0deb0adcd779ce21b43353affa0f73b2aa5d0f36a85ff2896b1fdf54e656a563feaa1ac0da8d5fe016757ad4d98429a66725fd3c3f33b401288d1623de576f92e3080479141dda1adc221d6dc4054fdc79929b2a9255e6628e696db77c462dd9ab002995e89730ba6950ad52d4c894cd015e9cb36eb6a4ee7ff12c928129b4a5f88649bf06d8810196fc547ebc599442955a5d6f7fd2eda4adfb3805f7e4cc848dd05298f85b5ee1b8a0c579c87ec9aa6fce9913e0e641a816c4492e52bdce86b72ebed45946119a27d9207e127d1164795e39be2223b2c8c0aed19893503f8ee42237f33ffb4b497c22a03fca2283327795c1d59c73f2e70d74e7611f0e90dc9447646e4e3f0741bda389337d1829b07e0637f6ae61006c693ff663a02be5a2836fe79d25b165c028eac4212394809449ac6531f0f8535523ddd97a4d175d14d1dd91c9146bfb0f8aab0476504575b9d3f73da3c3737edf306102afa6a4a12a88356703f519ac2999c2c1782125c6b284c6768102be9fe204fb1bd6fbb6db0e78389df0ca35ea6735970c4a2ded1304709da45e3575e77c45fa1885d7352c85fcee900875f58dcc7bf0844fb5c10520023ce15df26fb28d5e8dd4e06efdef0d0019be7162407d68ef35bd110ce6e92a4e1874894dea4be5e690998ea5f1466457f85fc8268e6cbc0595c38d853c3cad726bfd0c83163518e07f9fc06a844a84fe1f5ee9496367a73080df87efae3d0d18e8b05f87e7644dfca4c1befebb31a661e65c23dd34a9c86b1754df2975068671f04dd1c994d2b745320dd6be229ca66d792dfa91ceb0c448544484270083fadc7c292f6c4dd7460835e6bee6d50f2abe0b619b9ed31ca62ee63087a1043edbae2c28fd1d53c4e43c256c4bb4388cc253fb18dfd77a87eafb29e2e20c9cdc12bda6c91d1e0710693d72fad68b18b7841b956214004cc6a7df9601ca2196b10bd6b65e54a57c066e487431a164efc592314b209913f77c04adcdafb3cb5bd8452284b58eafcd729a529c66cdcc03a9b64b71f0856553b3d7d3f95cbebb2a615706ab90be82c22dbdb979e43876f15756f172c8b1ca7eb43e75016f7910c757fc7ad03104c2d3f314f45fc82b62dd97a756791d0b7fb76621e7267ed2ed25260aaf5acf1d59d1e36d0e5251760264a4e181f457bb10eb2811f3f1bf712969a8525b9da15128b81cc442b77ebf9428df8be674a3370696c5b16ab7b5797f71bb97e5e9a7ad8e2933eb1c64c61e4b4a20eacea3b8ee2e4404bb0b1414bc873fc3ea1fa760274a0827139d67f60ec2bc3610c70856fb0dfcb5688a7456a6858908850951f539da12f86eb4b713cf48056556a2d8737a9822f3c8e9932316e379726b0f21539c7eed9ca275c271b88000e7dc975562f29d01bf4a399b54ae5f9ebf509d36c20c3d29d7db48c57f25f5b131ec90bedcc9298df02bfdc69d4e30ae12f494279e47c111114738d3bd1cb98c6274523a1553f6ced1dbcf4d25bfec131b34280fe723d5d5cfc3a0b5cb815a9327783f28b71a3c0cc35d54656b39c7cfeb927396218e7498d7512ebee98594e86f770086f244082d50fcc2992a12ba49367e962192a9f8c762be52a60ac3d736f906c9dd477c2e5a0f9d44b014340fd05fc485771f68d1228859614c98902e82f46b705b08c7f00e9aec0072a2a78d07b84da45676d84ce73fe5ca79b5ed6a5994f7ddafff19d1938dcff6718141bd54c28c120a9fab2105ebdad01872b1d9a5c09632fcaf197e298b54966ad72369b13636a6997a616abc75c3066644ff33e3a44464e2a7c99e333bb37ed326a083065da0bd0ba802ce7c96c7c64f317dc4bac23e012d98df53cc656d58da669f8202f99f1761ae0dafba05ad7e06507b3f766a05cd9c05349f1050d6fa008afdc60fa17994c6546c2377a1b147b7c937b754f3039d6f7e03c9b240f6ffd32043b4f809e4983ab4436c03f82ff167f3084032752769029479973723be660d536190562cbf23bb0f4f4d51e6573a3f796b773d9a1396b7f4af69c472eabf727b5cee89b64df12ec03a5812b0e95d4b613f395033f4b27caf38de4917f15b79e1fe919749d2e0d2afba913d5469425e317fd21bd15cc3b11c4911303dc1a2d0395af4fc60b11fb3140acc71e772157078a879d7c45cc89031bd4f1231170d492f35628cd723b0a02640404646f7aeff8beb2cc59fa78f9bb0db85e3f507f970142845776b5f17fcd46ef99bfd8b69ea7e0fea04b094953906946edcc143043df23d36a3e55c36d5dbfbfd8c27bb1bf1ea8b0f3bc51a05ab5ae5d5fc751e34c0419b889bf91e2dbbdc07d3ab78315cdfb07b152fca32df60f9fcdecb080099e6aa0a30a35b4ad23b8de1ee25e187872c9039ab0504fdf3c0cf8bf62d8b2d897d150baeddc59d845fc3d2855d0a0b2c068490667e35bfaaa609985d686cdd338ba77b185e68f5fc9f586791f3da801b521554ef89965c55fba8025534e71cd275e9f3bb4e6d4b03b14b24d4b67fbb6fde10199a36f4b7020f6e89b37dc7d5335e8f51cadf65dde7f932fd0d7c9dcdb1b72a1afe680ac1a268cdbb092daac776f7955b50f1f5042a4a2c9911bdf316193139f102f93206bea8102efb4befcf46aa7df7724d06aff2d0ebd1686a910cb46d2fd7792d71948f7c494d6c112ba9dbed869f3bb43bac1d776dc3d10f6fc50af7a89431e37c3a41c89b26e27d7d2326b4928d58281e7c55b05616a140308fd446c0bf8ba31a19ecbad017c1268d493a3509cb7ad58b98c1d67b5f2d5700192a5caa4cf74bc73f2c4e3ebe82875c65524312fdb4cd08126e2c419071b91fff5a8b03b2458e34b1d336d95d80968c2816a339b2511e2170e4592c587fb7512893ea06b47f4f0b5edbce2ed9fe7763cbced34d46a2a6a92fae077d0a0ce755b4202b895dab7358ddf2df3f51dcba398b5c75e97f9ea92e7def40a7cb645588eb98c01bff1113470ae8320ca03ce840851e23d3e5dc251e06d10e0f32b47b6d50cec8ce4fc9a725b1ddc34c75ec65535347d4c3c5efbbd1b69954b3b9af78a8dde232a5b8d7c36ec7798fbb9be02db32458b8d6cc3083dae63045bbd724e5a9056550aae3695c0043798316041c2c763007dd939aa6fd6a31cfecf799367ed5faf6b824411d51ea1e211738263b94a03de5faac72e3203c65861944f1ffbed019dd5d9e1981c04193e6d54af567891d5c70324bdcd71d27dd127924f6c8747d372bf02c695956dd0a120ab0cb25423cf220b29a118b3b3857cf7ca69f6262bd551a85e5c7023f939fa667e575af794a5078f7524c999f0d8aa1397e693df4620443149b4348e62bc1221fabddbf53d9dc71833025cee4d5be2d7e517c683b76fa10db8502c79e1084c74247a95ebb15f7053713f65203c3531d5dba678da4fe1bb38d82ccd13f9e8c78339a9e5f678c7245104f2e19b0ea66e9acedf50070de3ac7d28d0b87be72f0e38fea2ae129935aa2bea88cef2f953a8bd29d7a467b47e2c90c9aa3ff47321235a0ddfe8393763e4879e5c6c9970ec7a57fa32194c61d56b25fbd6dcffc80ed3fbb6558c12bd9c4b5ed0e070d9a7976778ebbf31c2ce29181ae957205ac95f95d6b0a7687ca4d7480393fc86a0de30f7f63dccb135cb8f12116d4d0f8e990b4e08d76f94dc12d8f895e617188cae1f36b323e24cae0ab7d5113df7d3a807441fdf6317bbfedfbbb232b542fb17a6c62158f26f910c1785a60ca4cc6ef0d5a8f3e96122fc4348f5595f2056a128f7f4ef02ebf031f1e18685e8568479f9bbdf007760979a3fc32ab5e92f7005207c7e8af3b35b33c5641dc6f3c8611d4f8c4c971b20d84a99b17f865109695cf7e8ba8e2002c49c63e58f42e0432c1ee9d62ba47a06b23ea37b35c72902db94771f90216d8e0c5ea2cda64e0a5af1c49312a9ccb5b9de940e7e5a93d8bd2572d215ab03b9801f05260f1fba40fde0b8523425390a57990638c6381be4f02d57c864a6c45d6a41796c42e1395819df3cab105bdc27da4803f5d5181db47e1c6f26c0ff99eaefb2b6a9b482fa4202e8b4e1c74687977e4a1064f3f6079f859c6c73eab9af13322fbbc3c4cf616797650b171ab2765e9ee6d2895d846b61ad6594e82f5b019705a8395b9087f0fa94d5e67c71de3d908073be067cb0103fa7d76c8d2c7b4adf83d31b65ad7c78510328f6a4437017a9454494e98c7f506f6740ef10185397820e9202c77b8a8474f038827900f5d33131c29f47db85dfb8f3097d8ddc1d29b5ae25901d84db9e492401fb1a97f8fe8cfbc5e4f958e296689599b9af29f25c453d0300d864fc2bad8ecb2c1bf2b3e7d896443da0b6eb86db577222e796f90c502bb5b3f0b4f4deeb2ade38d5bc2f5e28c1be3fd276793493f6967ba1d7afc9bf104cc00f9e49c43fa9f46827825028fc429d38a0cf2b38ac2ea2c9a2dc1a9c24744515d7dfcc741df36b836ea9913a992fd86066883b31d4c9d72e50914f568b0a1ed32e080c74ee5420c5761dd14956e10cc112d425d58491266b18260090eb74ed9ef0a1078eafae787d1098761cd84e21dbdd755771ffa2585be72529e28de1008927fb1cc486dcf255c49fc8e36ce6e7d265dc9600b233afc7c7087ab46072a9c4c1eae4d74a041515a0ae50879572196a96f081cc96cde5631d147886d5dbb1bba7e83c6c72e3ed7d8deeeef6008a53c311a0270fa637ff69781d57197d3186b51fd7e27429e8f8fb7b63e606cc7aae02cfd891622193a26394659a7077a2808cc29732c0c469b4fe1e66e1cb4a0c9add53addaff4dcf5b0093bf91bfe814aeddc18818773a1b98d99f8384ee490392f40420e619d5bb1d5a25c860f0c78097f468a2893f6179bd5171ef9cecc2ed98a9c6c50a1e1773f8ddf2c1063d641e6a37b42c2d8525d756fbd5a7226d71c7cfe3b98cb4e6ec66e6149fb6715186f57c7acc714f020e6327b9c304fb36f9479378b32650f46694bd4d2c06ae2063f50e1ade068be6bda666158990f5840cc4e36d636d07b43207fb753ef4a8c7d60338c50c66596223d90775b54fe8e4be49389ed1d34d3aaab373150972e26518fac83eee3e1343fd4222792153ac5cc60995c71058acbc10e50845c326480a3052d4f49b25657dd408a3f81ad682b742f709d272a9b240b644f1f2f6d6ade60827047eab77176138c061be31c6e15ecfd7796a206af9fa769a9b79560a3d121d4637d2b6179dacf8057a94c5ad8e79f36c431b743660c3ac22095fbe55d15377185d543824b63948dd551d1ea9a439b1f2c49a23b1a17f5b4344517e378a7d28b4941b0326fe89c000e83208a58f2755a93dc20583f4145762975b3779c10e3c6bc8e53c49e5fb2036324485961cb65182748db0df84f4aacd5643d246b46a60c4d6965120125f3bb19bdcf0c0ce1fd81d5cbe0c7c49e17d0f6ea26aaba88a243e35796db5411df30ce884f8a3281b0f4893c9c23a15660a1005e30a721d58a6ca2709866f569bc860ff392098606d33fd2ec7399a907923ed6c828747037ab1208f3947c2c9f38faf0753b210b7a7446bfbc5c6d463a4f2678e9546358418927ec209aeb5ec730b668f2aef16bda966229981fbb21aebc85e8e285a9eb300a3b41d02bd6ddfdb789f47734808f852849b2ee57d69c116187d57a069a69967b2f5a83b93e9c7588d9fcd978f389c1ffd7d52ca1a1799dd8f26beabcd6cc87eddafe250501b625a8e7c82b9e8086f9adb27e11b502a675d24d4c2844fb70f15d6c82e6124d1f7a9c0897e76d9c551847c2340311f54fbd4b1f7cf1e2a1533ab147e712796fea9c0ff3e0062d3827557e408e0d00f003188385b58c6f7a972ddf634c784f2b80b94f9c057dc3aa93b0a6dd324576cb668ddf3d2cf237894ac7b8a8528003ee76b8e3365a9e4676e03cd335916faf7edb9f5c86ad0ba61aa7a35a4844ee2444893c146f9360881d4382c19d929e76d9f1da2cc3a6cc8fdbe19dd6d34bcfcd60b5c7c8dc6f1796b643034a15819f13630ef1c004cd771998b2f9384753ebeff94cb0c6a980516fe40c996822708c7df206ef7a58921d695413ceff9bcef9180d6b33db10ccfdab779a22d7d81b3bc364808970f37a18b0499232c83e6dfc90d728f4577c520f4d65e62ca04d87d0d9ff9efd280d71722b711d47402847260ae28972f2a4f7f32a01d7cab43ffd9f14af0224783b007c8b582f0a7c56df935dc4950a041a07d3566d6ba63c67bb364cd431d78aadaa708e035456358dbc1116ff847263d7c7c49f9144776fbc6afd4fa53fcf83682fe0682f9884f7d15d0baa83b4759b3e2ef88da65c5ba0cadb9609dd2f80e267d8108d111752d1c79543d7b29e3db45c4f1ba3073378b7835d47634bde2d7f79cd9451664dcdc4d2ceea0eac62fc0db95a9f1b8cd0fb927a1ac198d729d207c8236ecb10a09b644742cb2096bb2ce4f3a1f0a879088f494d81785a6aa67e97c4178b6ebac966865b3bbf3e3e35e95afd027f5273895293357635cfe71594b9d1896ba29983cde8819626cea13ea51f3a988237e5585147970b2166ea8f2d3c42cb00cacd527a7e1bb19a3e2dbf8315dfa481b3bc72ee6d37ba07b4157f497364346cbe709b12a7666808a2c7e9330814b6fec23cb1a4c1885d3cd654d3edae5f50d9bf476eb9a42a90aa1b514fc59590eca361e2ed6e1f8b5403f82e8f78b07f513264595c29c058a434696fd50af76ac1bff451469fbcb8861be7b29d74aae0d272d3363120525f7a4c26ad0cdd59310697518f37bfc41bd2597754d3d25dc35edb8c2368c98b52d3f75876d0fcb2ab1c698765c68c904e9a58acf995a637bbce8f944beba00c98aa61b602008cd6fb15a6c2323d3ab5a494a6edc0333636e42020c681102422b79e89448bedb27db7d6acfcbcaf0d4feda7926188946269a7a778dba185c0bbfcfa3d14d7d36a73649127cce22e62353d91bf3431cd7df78198788f272c78e2e84d3784e3d171c0222de6ba6920eb7342368937acf90cd439a8cd67c6951144bf1fa9d4f9797be4027608916e8389c613f01cb4cbf28c4e253cb873f86beb8cb4d80d407bb01daa3c02f88106073da1e8ef47cd73628e0e6adee7275797bb6afa61ab66a644798af3b6ec3dd79cc6a2a15fd7832d761c41a027bf49546e9e3631983ccf35988dcbede92c7d404e5f1c9cff00e89c2547559082e407d1251c1600a8742da979a10b43354d2e515c0ff78f7982a18c30b07a3d9e4d6f135cc08937839f44e16168c87bc5084f30d9ce3981bbce41f29ff873bb4200d569b2c3acfa0709642f13a081331cc32e5a9316aa6736e67be94c2dab16d7c430061abd59176c2e077d1e7edb6de1a24980e30d5a45d618f75e370dbab85a19e14afb11c7daa3712fae9278cab266ee4f41f3efbc42d0628a10cd7b80ca6639276ab6ebb6c1b13ec6875b5f7852fd1b3f2d73841c3ebab13da6cb23c5ecb52139cc36a0577023a1ce9d3e4eb6589b4f5920775f573729eb69aa0ffa9901a1d91fd4cf5db9582b87f2566fec225721c450eb8c60c1dba3cbe58ad95d0525f36bffeaecbb5fb01d60b0e891e439fe5ecee016b8c2498c0217b981899d54919aa06c74906640c680d3a1b6d83a97b84365399022020fb3c7cc6aea89d4b54e2c474911152ebf1f225f826ddeaec79036b404d2573df155a785782f4a10af9c4a4ca95562900c4dd17242bce3681c4d87308cbc2b8e6a487a9ded3fc364d952c159033e7edcd2e4968b3f7a1f1e5c330a475e0e17ce1c645090c4b47886f2e96d5c8aa6d5d630647ad96c41bc7e3a1941aefb9dae57dc8fb1c2681610edd7c9f6f90c747dd5d1c94894ed738f9dd7e51e2089a3666d10b6a53510eec5b88c8923f1c09cedd143ccfd98892ca6a841b8e1508971033ebc0733e31ba55a357ed98ffa69b4c1d76aa164aacbd3e627a49064c60b1e65083dd82c7c609d5ee386500fba2369bd6a830522483769cfb489bfa791515eae8974c0950f26fc819790a6c50f984dd2a01d68ba46bf18550b446963a5a9297539df2e014c2f9380b24eb51f10fb661e98b270c21a17137241a82d3838377f68141db786bfc01b698ff0426b38d3aa87cd578d9296b3eaaf1272c689fac3ba96eec4d9e000a82d1890c5d2754a5b96052f1069ae86082332dd89f990dc2ddee48ecb7d88b5b1b19d25a0e0211d11ce4c6d20179c7d17e3d7db57054c13e3653ec54f792445443a6f40feca69932a48caf37130ef0636b918c59f03eb59915d030f8c683b9e0887eed3802220a52be43abe8214cbf32a5b6a70a7dfffc6d8a1507994f133b3c20d3768df08a61e9f73cd68be732fc3f78fc0b0de574ece19ad2529a1cba0fbb4aabee59e464a5bc6c179420bb3a00d7c74baed066a087ca140559b5f370d8c11bbf9b1e1a57f6e18c69f2c7da6b1c21b38826ac4bbc3238e6c80e7ea58f4f5d1839e17a06e86c4d6d9eaed1598ebe71bce71a06112f9cd53cb9130ea6bb7cdeb7c12ef7156594f13294437e808a9af8014162a5d8c15e766bf0f1b8ab9970995e8a14a9b71349d1e44a38e498c3245b6275a94bc1d9667c0879ef2cded3ac4082f86c5c1fb6efe05d874d1d4d421f805f1fce5207c9f15c69518df0b10b1892c71ca21c5507cca7c74fc319522f554f7ef602a2b8d5ced946806af239fdf1cb2098e052b115ad253f3e770a5db3cec67ff050d89423cf55c3b4f7ed6ff687c0305b9ee9469b242afe57d86cb0866d1c3c32cb41d8cb276803aa454227956dd385c551423bbfeddc6b72900b2eb013558ed048ee29c6321e7868f7ae2ff7734e29d351f9635a698b46c74c3367dcafa10e1ffa59ddc8a004cd982522f67862f1196d89c5db240fa307acea059d467bccdca76ee1a03be03b1828345384ffa6195df15a5605bbb3eb75df817c054578cb72033e9013a9bf60dad0e5ea2bd06988261cb5f22d04dcbf1c3713bde197dbae33ec01cc4164291efb8342d7e5f54a9268574e1e38dfce5cafacf42bd1b8c0b1efdacd1c86bab1426cba8d0fadbf29d0d46e222c43a69f394e491a84d2013b42aed031f96d3b7ebb379a462b8dbb9154d1c103009a6b53d9cbe37668165def2731a067b79eca3475633dc37b0b74658629610daa898050726d84831724a93723fa6661a07f74c0f756807e2d599cbbb5b24f6452760441cc1a3815cdf20025b6987322078d8e9ed505e60bf5fe7d9de167d55e741375f69acc4a3d233ea5de71b36a4acb083073beb956fad41c9ef35b819af7d413c3bf9dedfd1e860392a17393ec83485b49c23ac35db3d1505e0cbc46c0d15735911d9d62059af89cfab6487277a774a2d5606852432ea7f7ab98e6ef8fb62a91ef9dcfcde607cdf006f95b6f3be3874cb51b13c5a14b7d79a44d2fae18b170c23b9b405d7f8853121db26d15c7aba96b0a55b8bf25e6945ff3fa5e250315237a74df1983d2a1c437a180ae3cf1b37cfd539157097a7a7551fe56931708b776ca994012e07c37494830fd1697ca74391c4aa2e28d00f7f185700580a09d4bf181b83663bd118bd87bcde23a14e8cc086cfaebfa46998fb4fb88ccedce5cd93952333155de2d8d20c76536d90018f6375dc65f50e2d431e1134b805b8dffdc23601c0006595ce0a02e3f74a15d7dd609b47d218b70eba5c28b73c96fa84a25122394428764b6b48d784b4e130bd940dd83b2b921146cd78633dea33f70ad94aa73953a7b31c73255291bf789fd1087f3b2a7a5047b3571ce3a3f92944dce6f6a2cfa305a2e1dd962211c775348b76dd584bd3e2c13096c3232b177e0f140cb7a17ed4a134b16dd89234e31be3c02c2cf5cc5673439113548351053ecca3c9f42d46a85724a3cfc73df2bd21c9d5c93436c5a0f5dc70081955010e1d4636e8161d785fa94b0613510dd88e22a1f8c95b635a13f0f2f6955478bc60b5b93dad78adb8f20f91bcbb823e4c0a3077dfc540e9128a133487e5ec64e9965ae0d64ee5ca213fdbad83335f4a3363163fd52795e5599c5fbe838b84fe531828f4a06b3bf037e1ac016298521b519d8a14684790870341ffbf1e16159afd1dee07e10ea844b361d113daabd5be72ab094751b1d1fe67ffd206263fd56728caf43d8073ec602d447323a46d1e697193d78a50523ffb4dfabc7d876e602cb5093f71962cdbf5a91dbabf09ee1842129c0865e86131024a88fa1066332ff5c276efd2c4451fafd990b40631a2ad1442bd4e0db8614113736ebb91d7c76b3e2963a3c1a11383f8c79a19094dc0761ed27af6fba69495e6e52179744e8c6b7da461ceb3d1bf674c6f6a544ce76cc3fc1f4840d3709e31a937efed1bebf6feaf241701d25f09e64db9e6e3c9108954be5d0f39406e9a913a13fa3c885eb1463fe1b71d48af81be7221e41cfb21c965a10db67697c98d30b5e188df192e0c0211ddc4b6611614f97eb26ce5379f24cba20378e014d78750b3bc823f39b7bb8cbc3248021df3c0295441b8424f854535a8e7a76934681d9f0e8d88e7efafb10d7d26f5493066d494c276e6a75e3774d0d4fb84b61203520462a7a5a34d4d66bdcaf74c81633d3530c44eada43666a2dcd33900cdc22d019d210b38101afa30d93f620061594e5a5b9aafef9638cdff10cac5d49cd530ebfdc42a2ffeeb85bd9381920301da06e01e9feec96e47112d2e65d25d8a6f5ca4f95aa1f33eda3e7a00ce328b08c7f3454cfc5638ecbae03f72b3fbb461865ced3745a24bd1f6dab06e98b5cae065e47da4031c8243a48d66fe1b2c44b2432a2889b77b46ff5d665bc6390d6c46e006604e523c3f432e75a1a289efb9ca3341816d6c71dbe8a0133905aba1a9eff8b96f7af9d4e781dbf28f32baf11fc7e8eb2d43e81408f39190ac78e098e2d235b6eaa52655dd83bbbd7d43ca0d1fe6f858405e4f25001285873cb498466702344bd1c3d3224f231d4e589783180357bba0a70644f9f70632baa796efebb6ee20d8c9ddc8f6b51cfd67adb9266cfa816f7cc610710bd10de7c321b19b859f23fb487ba80d5eddf7a58df423cb4c9c189b5a2d66cdfda59dcf6f115cf36f06b5b193ebee44fe88d2b5fd45893a7ce7b3e9840b7d894f5a8750b445270c62d58ad9585dd994d4ac90bddebf5a3b82cd25ab2b33f77bb9d07c3ed20c6ce0304e93b2646ec8b87aa939d0d21a83cd8fa79abf8db33f1961d5bbb689d4eeea47d3da08e93be162bac7100b97cebb1f0ddc024db9b54465d183e90ea4bae466279a520d88961c9eeba4c1bb4429b46060cc5f5de75471f5fe435dfa7e7a233434439a226586b612a91f2b9347d3d6b7a51f482d10fcedef1cedf55682b30a6aecbbb20761382dbe634dd6338d2514c9082c8d18879eac8e187cc46c5b89a2c935c6d1b57d523d352126efca7ef46f4334dda37dcc7d8f48f3a48458eb17ea1e5e3f5211a9f0d053bbade06f5df8a48c6c8fe7524642836fd71666be078b62efe249f1a80e07617341bcee9517c73f93d2480425f3df430f5d981444ce8c07f95bfd57b575202eef504f9fae0eabc80140b2c8e1a4eff0aea483c7750f6b1d59fa4f77c2f8b39f792db71b3439666fba4db3efa0d43ae38904dad7075b0f5f9e729fdbb0a23c67d44130124def895f3d4e9cdb417e36abc4e8aebbfc395adc38abc032ab8daeba844c744856c07921659d499167a2aff9f8eed21cfc482ddf6962b2a4da9619c4bc7c0903345f368623b4d1c2acc4fcb98498ab022e292a6adc740af420c6bc986a1ac2374133a75bd116cd75fb0c06518c4a8c6bc800196cd9d995a95783df069e3d17512acbe5dff8fa27379928188ac3f9eb60c33277beb940ff2a0549a8571c0a6d9132676d26b3d9a8f015b8f1050fd641416c1aaff5106cc80816900de7336182b166fe52fa3ad85d2f44db482305866fa1b09cd141b5b7fd7fb6e89269eeabb3f29edc9511bc15d130913065de2a2d76a22974c941e69faad249a84192f896fccb00ca4914b0d093207c186c9b18d2216e10314d141cfddeb39ebafa020b38d4290e7dc1f8b7a6371fb203f31649e8f3c0710382d382af44e71f542416bcb631ec9b92601cbab5be5c637561b7cf47d21d2f2ac6bbbfe32e26b5093711d7173b3ae17cc5305b002796e74e07c571dfaf0f651c92027c6dcf9feff9cdba06da1137968cc95920378b583acd2589a4f8072087c8ee4116901a8c4507957a03305de41909cf2d0c82033e23303ad1a3291c542fd94fc9467f4d41afae4e9dd0842b17319db0d0563ae7e25cc56138baac7f4bf3652aa3e44f31e527b0a5df2f0c7bc66c38fe8b40819cc31dd4a48134b540c9098232931381c6f9e65681deffb9e3f87a4551f0d1fcbe672e7a203a6d41d6378b5441321e6707a13b02cff2ce3857f389d256931512d6f0f6c371232c62b144ebc7542112d89c6af80982ea953497eb9c434db49f9621d2f32fab388afa6cecb1d9590736807f01a11bfee71a55fe239094cb1502c16fa95ae9f700a47ab5ef7dfaef572e9612bcc016c2c9f1ae22cf1e875e276869d10ae4e0962027d06ad784a0eeb53938b85570aa5a3dfc540b78a5affe29d79a48ebbddc034c38003edfc8fb5b60a4ffa3fb3d0563040e0abebcf3d2c5ba53c0daa00b39f9c5a8a600f40140e7d6e7fd71abd2aef0b9574b05e86b41684ba33a5bd933fae7e860620008d25339bd7ed7a38e24f8713c373d683bca1f230175a20b8aef1f183d874acf80e2a9ff3e9904804b3386de6767d58fc1ff556c8ef41fbcf160fd42f487076f014612d81ceec8711b6f2afd7bd36e4b90a06c53eb07eb26f43466a12b3da4dbb115cb0e266b8486beb9943de92006c174463e98271a197f574705192f44d0adf19f611d10f1621905a8cedf4af4bacc0f8cbfa550f303394121cbc06b1d7107be266e515b1164b466343247bd9bd1f05533999ce155fa35235343092e3ef144140afe76cb670354ebe6cfc1368ef46f73d419466fc850264e438bbd71d91d1a8b0224afeae30a3d5dcef0f51c3e477792f81051b30bd39e93f41e0725168bd1a82aabb57360c2f069e27d250ad9bc0d2c6ab6af638dc2c813dfb61767883c91e492248170be2896b67ecd3d598661da2c75e132efa4dfc968f4c8cb6831aacfdc9544f0b15ca84705ff363c2ae1e40289defb87b35551fd0177a6459abd3779aa0d4bd2fb120e21ba87612b46dde369ddc32cc0052f362cd96712842e5b5f51da1fd6ac1aa3749f48cb43b57c9d5b2c5bf2b38772fc61aac6631112d4dbe6557e6ec8232ce099987498c54f5e17dec25fa86b390ea1dd9e358b1c5ae4619f9dea41a3790330b8b79a30949ddd03d6e37118a6c6c8de02c388769dd775c95485e32cac0c01f4b12fde78adda10abb25fc6eba6eb15e189c378d07a818c098ad862efa6bb2ac7602ddab9282b9447e126d5f8c1614497c33017b3ff69224dc4d6de19bbcb131a34443044cb2d0ef2ac6188bdf685b43ed2daf0eb11831af8690c0a018ad03631a8aa03e5c513161ad296c10ccfbc52d0bfd4466b6fc0b23caedd557a548ce71d428081e66e79ed9bf6c80cc82ff58cd1cbfaa5e064df26d06ad027cabe5c1f444ea47717767ac935a1f0a614227363db6b4a7567dfca5c40f1b236664b299887ec606ea41f30fdba431f8c509a69c5abf133a96509134f14df2a2982a1f114483d0223e07fbcc3ee3a09d2388ac4593d1dc3f821bb07293e53bff0fed25cc75378f9c343fc73b2cf750da24939d79c942f02adf1c7f4e880d58722617ce3634223bb1c5c92365eae7d68d2cde6a44cf963066900fa5a883a5fbfbb302f8127717229729f4f2703c274c8f90feab1597c68a18af9b4b3b67cadf593696b2f146dc9c97048a2ea14074c90d3d538a93dab33f433668de1cc3f3f93c780aa9ba90bbf7f3609698d4dd9b3fa07cff6056a2e9a62b6e3b16a19bc5b3c2fa5f165db7ed2ce8b047829ebb08400d0a7c8397ccbacc9f11290888cda64ce682b810c574690cc1a6fbfe3cf9dc1abe14661e925ee07dc1f16244354fe573ea7411b93db19700255bccbb34278e31c54b40edbba074802e186c1720832f642b0641f96ed4acb6f15613374b2bcb79549f081231000b00a74defb897a4fff5dc42e617d983c8904a13f7fb182792a689302a637c742ac63a84504b9cf3306133781e66a9965010ea40d15097dfd7a6241070387dc83c451eb0df4039e97bce4057f5cb571fdc59a352da80dfeff7ec946268f1a7cde7e2ae37254fa9e57f864f9f7b7d3626f56aec4ce27369075dc05277a2e52949784634d2009724b8f63dd3bd7f804b3404075063a4c2d6acb6567368c8407a0b08130dfd1811edb321774bea8ebeb96118fc3aa0ddbf423edeee4df9b10f0f1fc5a69a159b0bc685849a52a425658267a267ccc59e46a65cfdb18fb33dc49aaf2bcc46fb5595ec4865e034e4fe87bac5aafa1ae973cc8b9e7493d7a5558046435baa2a02a7dd8aa03cf8b6ad70434e2db529be575945ecafefdfac503dbcded8d79b96a37f34ed70a30777a651abf0de7887f75a0ac768c2ed162b18a1ca7de0e0adedb0646d4119d62baef48fa72991fd273a70e4bfcb6ba837988be3df01b23ed02a4a9b5aacf69eac8078f49416aabc1fcd4aa89e6c8496c69247e0ec9960e024bd342d6c3c46f707c05c5cbf7e354cc46a042a4b530c0d330b3e6950127a59cc8ad0e97e2de990656433f650d4447963a9aaf7c430872acdc40f56c6f50a280b4a26e744ebaa8d4835b315bd4d41de652e741b95bd81810287e4253beafe7b130827a357fb21c3e724754dfdc173413d3dbebd3011f74b898b350ce360ed77a30de06eb676a897ca212c2f6e10eec0574a2bccecf626cf9474b9eab5c26fa25338ce83641b96b5530a60bd3d9f4f257898fdad245167c81e7e61c85c2287d3df7a402042fecc589269ce04fe30cf96cb577d58db1d81f5fde1bce303bdc0fd2125017c15b2489b3686e342b2bc621039317b92636f66b57e53209b10307d18b594cb7dd05e7dfc581c80011fcb038b537ebe37189cf7308b2eb977ad6388a713c07962c4029960939de178443a46926430781cea5daf4d03b9ec2411345f4b4f5856a6df0782ad7c49b38c504e48249ff354dc54ecd0282630d419132fca88d8b65ed8af93ef64f763b2a3fa804753fed4950c16cfc1798a028c3ea67cb4fff35c81129213ca39e6889805b55535237392098e9a9af1a4cc6fdc50df5af0a1dae4c1a746c5b50f8a870c88f26fb509a5dd22b29583928caf7ad4f8dacab5866afa7b0949b3fb2c367e7916aeecc1f4f6f39a383c33e31acea3d0dc34b8a404b28246e68da669169f3159b628e02e419b50a4d3dbcec4b29be7a45014a93c89ff3ca75169e0250bdc88a70cb1793f1756cc0f1fab7084c65154b7a75a29f1a222b870509e0ab141e8099d4486d97189bbbfbebdf58168f7f0cc1e2c3dc3772c665f1538d4b0d2f4c1a760288697f0a5cc0cca285675b42251f148cac0b468bed8658623d37be803ba12deaada2d1693aaaaae756d6670d01755aa805d02e6ac25dcafb259922d97920410f0636b3fba265dec7d559ad2543336bdd09028bbb200198f0681342e5c229439c4f4da8c7a30dc639c161e618a1d295eea0cc310e1eef02f0d656682b5401b9410ab3baf059662ba13cb3c9b9d109eaea5d38ff2138dbe496ea7432ffeb634152fd562974192e933ad846c83c67216e20b55e0975de197c671ce5af1186abe9f613e5c1eb88900185efc2e1a4d9c010a36354cc3c2a7bff35b894dc1157aaf1d8f910c6f5c61f73fa026617c0ac32dd5ee64f1f4ac8ba0780fb41ee5e6d03d6a7ec50ac984e6fc1cfc0bd1f410848f2020f70072703e9adcbc032a966cd1e25eb47e0ddae6bfa8cfbbe5d28539e06bcf9d95ed718f3f899b78bde65ab68f3c84e6d69b628ad2c6c7d28dad765ea45529147e85169aac5a7b6d4dc21916357deeabc75858ade587e36bc29780e290d92b874ffb020cdfa2e63aabc492e5eaad763ef1608106cec8675f4400fb10731041292d9d412eef0bc746d1f5f15cbd9df86a3d4b1cda23fb2a67663d32b25114727e279e8b4e7053d0c3b0f482142d3517eef54efe54914264bcc758df198c801c94b24668ca4f2aa8ed4046baa7567ad20da5b8679017adeaf947c652817e2db5624ab7505a772778e927ab67023a97e8b9d6554d701e871febd5ea04fb0e879bba920508496017daf785035e8be3cc2e81d6a756c84414c39f498417b18cbeb3464618cf0d9208dffb933e6745c99a97a4db327b606408ce6c11f04504c4b8901503e97ea2caa7870a9c872e50390aa3d7141c095341691a9ff1295065b71781db868dc2805c984292298db59cbade57a136008cd39d2c68b124a80e4edb03f3860298ec4944d978494026b7897f09e55168a3a87de0782e2d2b60d1e4421872b718ff43571d5503f742487cce4c243b1ae1b5e5f23251b38254739b23ad6e5427866b65409b61b987fe708ef167ffb4cf11c0ab0196b66ee95e5f0fa05c6a7021aa60e0ff547a5bf756a78d4c549ed6633c453639f3f1b53008661a14ba96b62ac3cb454ef7fb8f224efa804d9588571cf3613771b791a6ddb0dd714656d30ebdc0ff7b30179d93520ca72f5f5370bf6bc44edc860138d8da2ef7096c4a2ae6aa56cb449f31344cdf5c6c463cd8e27b0fbc3f56c06625c07914690ecec1ec9bbb100ccbd5460ba61942b4a4ecfea72b229dcd42ea11ae2a8c924b14b63e73e85f22330a59ce8b5aff30b113c94d47506a2e2c1b68aa4460585437c853ca71c703e225aba3df632c6e235fe3a7524a552687c5bc2b274e8eb2a7746962ff6a4952d402e59360dde3a2d3bdeb82d2eb3d77f3c0ff322feb1909acee4baad02d05dd407a24fca52a74e22e9c869b9ba6eda1b948c11b73f9879ed21b3c8c51b291c20cb0ec93b83b99693ef0608cd518f16db234ba5e0f2317da8835de0563e2e4e33704585b4b31e02ede5d1bcc94cead9473f8afe2e089e28a1a26e5a99d16bc9d453ced2875aef8b300cf0200b43c1a080af2071c4d0d13f84e87ce6f76aad8b0abf052f080140119d71ac668a1c150640b769229f06076eae5b172c27f4c79025ff8bfc32348b58a4c6388afcfb312cfc9e90a2f9e67c83d6a215e737b9a85d3392c4e8822014205ff7d0c2d615215786b417d1daa209a7c8503289927005c4fc034d680157192b47ae538e1c4e837dffb4908f9df4adba99b18e2c76316fe345aba98614042badd60af86ba72ecaa85bbc8f4e59bd4aa1665037b7da1b54faf039101ae5631c5d2c78f7e5d6d488646a3ae6099d4302be7bf1181fb5a7befe3ca7f8074817b81921cc43afc043086c5fbdf72e983adc497d40a6c6007a7a3dda970c71ff5e84602ba2830a4e12c5554185b3147fd827f08a8789dd65d070d247c61695a8a16added1948fb98356d05a4be95a76d47baf41a39de7753118650349fc521756f2c695c261e24fbb057187af9ecca33aa2e3a684238c08d2dde24a567bc9c20cfee132df1399e64c5bc7c9c5a04839ca2a3b8649c654363c5bcef604d507e98b9331eb258a4f1161eba168bc9ec68184fec60c1e815607b3582f0ac42a0451b68c94ecd996166caa6c26332388031f30d74c2891df8d19596c046275fa7087685d0e8c3cf2b0ffa57d95495f38d5c7c8c8e73000908f0e8e3d9e19af996bacdf1b3055089206385c170afbad3ef47c316c81e5441ff17c17fc10e976b24b34b9ff0f310407e97cb46fef53f3e6ca46d444b901e9c076f4c05489115ac5a168e5880354be372a88a3324d43dfc9313720785f4de68ea9436eb59143cd8137e0459df1f01fd637970e0d0356d19d6143753bbf2842a6415d04e3e8bf8e12bec7efad7e59aa2fcac3d7da3de55dee6dda953ddf22e552989b40274c0bc58f014b3314740476871f25f22ff20f0063efe39ed654d5f094d0275e8ed70bc14414d285ce4510982e7c12bc2ab63c4eedd92199d68992d7c73166772bda86c962082f8d227d59a8c9ab57eaf08d97bce14e1dc735331fe9096a9435e656656c90870ed5b1d870d468742255d79b4257548c2a456c8255738e03af55189c68d5df470c26542e95e1acb0226c98439b414371fb4bfa4f057bdac103aabfb8f362b131b7527f83b7d5051f9ff73c3fe6c48ff4f34f2d978801d6afbec201bb8ff61deaaa0d95a15892470c1761bef4a123b947268183fa73cdbc54b5723dabdb294e66517af2919eb69968289537ad757096ad83349c05338ccf447452b26a149c18c9a2ba9289925a005b4c7a4323f13862a2b884ff3f044d7695c826ee174610da44bb3c1f844cfe06a75b0e96cdab362c9db4f532120022fabce7bc5f59ce95a891475e7a624a3f0883d275a3fd715972ab6aef9aa51afd6a808b5614a9c876c812c516d0f03529547bd50b3cb10e2c76ab70b5986c13c02af549ee0f1d2d22ffb4947b89eed71ccf2c635a4f9e5138aca000f2c00ba65e119e642bfcaf16be0ab8edee8c0a7e977e1907b8294102083c2d9821623757dd5424987937aad6c5295383ef56bb5bec0b7f13ed00fe50c1a8abc45b1eec6a3920769905433d655f29a942cee410c7d84ef56ca2b016f37a5870acd4b0444acb440afacf29714143277f3d4c5efeab57e71ee85cb64900651c9b072f071a72b5f9707444286c590a43467e92d339b76ad63c82b51e9deb155fb0f3c1b2ccb8f0e246ee29bb1e485540ec4be57068b71742cbe625fe1e6df8677f388dc9c0249786f13acfd411c923280c1998b40c8c6c84c2c8a31b2996701945b8f1e92c2d3daf845c11c3bf87bb4be791afab1079b6573b7f4cd608006865631510ec2499ff6f3d9dc1235909b962f9fa84d5e4043a8a4a7d4409bd47dc7d6c98708cd87ecad6bd80e413fadf3299c8639fff7705d8f16478bb9745b6a2a8f05bc5d9f3eb82d6b2f2592e9587effa983440016ff0bcbf3d3be9e24750f35f6c018f27a00f7fbfe33569af313751ae560a5969d6a137e108914c66d038c8055b61b6ca50c0b69604925ac46f9d119f8f5ce1a2a74e0ce5b857b30a29a42e355e1cd83c9e0995267dd1ef3de4255b91c8972abfdc363f6a16feecedf8dfc306eb9f390b7d693dccb73e6eb65683109a40baf3b68d5d95c5e99cd59ce5413a315e3748e674bb9baa5c4cd8956604a04c56f321603c03638e89ca3aca317477c393a2f665ef2072ce15a9c4569720b618f6151b0b9028f5ae2a5b766d80039ed79885938723fe7ed1dad449feffabe9fcd744523f3ab285878a37f811dc4b610d65735af37fa020670f43f3ede86831e7dd6581be704dd2103f36f7fca748fc8ffd978ee0fa3366db7c7a78e05fff7afac3df644c02f60b20b57a6c7bfa17ffa99a8561564758bcc9cb42f89f903d756b196696f3ae7dcd165d931bbccef8dae13bf9b232358d0de2e83e67ca825aa18b2dcd2f5a8b1cc7716ba0ab4fa87679dd60430123aad98bec80cc21b0d14c678744b2b920aa8c20d642078bcde3c60a558ff5de17edb462b8aa75b3df5d35ef5605876e82a857899f6c036735609c131c9ffd769354a05c08a2e686d2ca177ef163ab23d1746d2f7d759e5e090690df7da881d00adeef1f4df530682066977e2b9536d6accb89c462f1150bcac80ead1c7a4ec5a38b6105bbcae2dba0e463ba1a0c47961ce0d36cae091e3bd7b89be2c58be5184c712008d7bb50ebf4b6d0fdfb44d901c887a9a558f54090d3bf7e2529736f948fb215f181a72668312a1db1f0dada7193b35e011bcc85497bb7c2f59348129d7500b9b418398a57810c0ff3f75b95e99b5def94810a7546ea61edee25cfa2f38e6a5ce8d0c63c0cf82eacbaa4d50565b713ff312356a238c67a830a6aa13e2a40c2fe27ff8d464ff7ea4a8d8e090e218c656a799f08c510c6a3edb80a48ac76909b9f19bf95a05dfc2ad0004d325187ff854e7408305b1250e26146051d74a1da7d401a76d1dbef6eaf11c88a8e6d83a955cf21bad4bc13f8c39a444840ceead09ccef91f57c61a1b0db2258e8e2d2d2dd711378843df9ddb917ddefc4ffa9ad4d61be18d90f69003b43d7fb9cee348fcf4f04a4a65b4ca9465c66ad225c4e892cf9ffdc632c45a3dd4737e48864122de02dbb46f0b616a9ecd515ab7f68a261452ffba406e8c641440ffe3008a28e802f6ec0f0fea29077b220e604898a45211d4da3e5987fc7644a7bdbd8c6c0c9e558224f4a1a1fd702e298acb7358d1d114dbef9da3befe61cdf016648cd25d471825b0c2fedd42869d5fc3bdeb15a4bf67f49911e91c6616ce80945ff940489a199dc2d94344b8e0e0046e13b4a631891efec6ece2995e864013df448f3b5adeebfb6ac1de8392ae690405d4e98b1b2f8e23daa04309222cd7f2e8b3164bc5b336fd78c707477e3f9f847db9c0a9b9d2968ac98aa0241c236dfd56232c520ad67fd850c1ba8c7f55e343ba25c8d8e4b2ec5e050b311797ef9231c04808eeecd3ddaa8e53e633</script>
  <div class="hbe hbe-content">
    <div class="hbe hbe-input hbe-input-default">
      <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass">
      <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass">
        <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hey, password is required here.</span>
      </label>
    </div>
  </div>
</div>
<script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">
    </div>

    
    
    

      <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" rel="tag"># 设计模式</a>
          </div>

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/elasticsearch/Elasticsearch/Elasticsearch%E5%86%85%E7%BD%AE%E6%96%87%E6%9C%AC%E5%88%86%E6%9E%90%E5%99%A8/" rel="prev" title="Elasticsearch内置文本分析器">
      <i class="fa fa-chevron-left"></i> Elasticsearch内置文本分析器
    </a></div>
      <div class="post-nav-item">
    <a href="/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/06.%E7%A8%8B%E5%BA%8F%E5%87%BA%E9%94%99%E8%AF%A5%E8%BF%94%E5%9B%9E%E5%95%A5%EF%BC%9F/" rel="next" title="06.程序出错该返回啥？">
      06.程序出错该返回啥？ <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">zhengyidi</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">39</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
          
        <span class="site-state-item-count">5</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">7</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>
  <div class="links-of-author motion-element">
      <span class="links-of-author-item">
        <a href="https://github.com/zhengyidi" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;zhengyidi" rel="noopener" target="_blank"><i class="fa fa-fw fa-github"></i>GitHub</a>
      </span>
      <span class="links-of-author-item">
        <a href="mailto:zhengyidi1357@gmail.com" title="Contact Me → mailto:zhengyidi1357@gmail.com" rel="noopener" target="_blank"><i class="fa fa-fw fa-envelope"></i>Contact Me</a>
      </span>
  </div>



      </div>
        <div class="back-to-top motion-element">
          <i class="fa fa-arrow-up"></i>
          <span>0%</span>
        </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2021</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">zhengyidi</span>
</div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
  <script src="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/pisces.js"></script>


<script src="/js/next-boot.js"></script>




  




  
<script src="/js/local-search.js"></script>













  

  

</body>
</html>
<!-- 页面点击小红心 -->
<!-- <script type="text/javascript" src="/js/love.js"></script> -->
<!-- 鼠标悬浮 -->
<script type="text/javascript" src="/js/mouse-float.js"></script>

<!-- 鼠标点击爆炸效果 -->
<canvas class="fireworks" style="position: fixed;left: 0;top: 0;z-index: 1; pointer-events: none;" ></canvas> 
<script type="text/javascript" src="/js/fireworks/anime.min.js"></script> 
<script type="text/javascript" src="/js/fireworks/fireworks.js"></script>
